投稿時間:2003/12/25(Thu) 14:56 投稿者名:おじん
URL :
タイトル:BitBltの使い方、他
やりたいこと: 初期Formをスクリーンの中央に表示し、そのFormの背景を「その位置」の スクリーンの画像にしたい。ただし、Formを動かしたときは、今は考えない。 考えた方法は、スタートアップをSubMainとし、PrintScreenを 使い画像を取り込み、それをPictureBoxを経由してFormに貼り付ける。 PictureBoxを経由したのは、いきなり Form1.Picture=Clipboard.GetDaTaでは画像が (0,0)からとなるためです。 以下にソースを添付します。また利用価値のない悪趣味な質問で申し訳ありません。 なおソースにはテスト中のもので冗長な部分がありますことお詫びしておきます。
'Module1 Option Explicit
Declare Function BitBlt Lib "gdi32" ( _ ByVal hDestDC As Long, _ ByVal x As Long, _ ByVal y As Long, _ ByVal nWidth As Long, _ ByVal nHeight As Long, _ ByVal hSrcDC As Long, _ ByVal xSrc As Long, _ ByVal ySrc As Long, _ ByVal dwRop As Long) As Long Private Declare Sub keybd_event Lib "user32" ( _ ByVal bVk As Byte, _ ByVal bScan As Byte, _ ByVal dwFlags As Long, _ ByVal dwExtraInfo As Long) 'keybd_event=>特殊キーの状態を設定する '------------------------------------------------ Sub main() Dim x&, y& y = (Screen.Height - Form1.Height) \ 2 '下のBitBltに使用 x = (Screen.Width - Form1.Width) \ 2 'あやしい? 'Form1.AutoRedraw = True Form1.ScaleMode = vbPixels 'ここら辺はよく分からない Form1.pic1.AutoSize = True 'Form1.pic1.Visible = False '最終的にはfalse 'Form1.pic1.AutoRedraw = True Form1.pic1.ScaleMode = vbPixels Clipboard.Clear 'PrintScreenキーを押すてスクリーン全体をとる keybd_event &H2C, 1, 0, 0 DoEvents 'ClipboardからPictureBoxへ Form1.pic1.Picture = Clipboard.GetData 'Formへコピー BitBlt Form1.hdc, 0, 0, Form1.ScaleWidth, Form1.ScaleHeight, _ Form1.pic1.hdc, x, y, vbSrcCopy 'x=0、y=0としてもコピーができない Form1.Show End Sub '------------------------------------------------ 'Form1 Private Sub Form_Load() 'スクリーンの中央に置く Top = (Screen.Height - Form1.Height) \ 2 Left = (Screen.Width - Form1.Width) \ 2 End Sub Formには、一つPictureBoxを貼り付けておく。名前はPic1
以上、よろしくお願いいたします。
|