投稿日 | : 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
以上、よろしくお願いいたします。