VB6.0用掲示板の過去のログ(No.1)−VBレスキュー(花ちゃん)
[記事リスト] [新規投稿] [新着記事] [ワード検索] [過去ログ] [管理用]

投稿日: 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

以上、よろしくお願いいたします。


- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

- Web Forum -