スクリーンショットを平行四辺形で表示 <TOP>
スクリーンショットを平行四辺形で縮小表示します。
CreateDIBPatternBrushPt DIBとして定義されたパターンの論理ブラシを作成
PlgBlt 平行四辺形へのカラービット転送 (WindowsNT3.1以降、Windows98/Meはサポートしていません。)
PatBlt ビットパターンを作成 (WindowsNT3.1以降、Windows95以降)
SelectObject 指定されたデバイスコンテキストのオブジェクトを選択
DeleteObject システムリソースを解放
GetDC ディスプレイデバイスコンテキストのハンドルを取得
ReleaseDC デバイスコンテキストを解放
例では、スクリーンショットを表示する左上の座標を指定し、平行四辺形の状態確認をしています。
左上の座標を指定した場合
'================================================================ '= スクリーンショットを平行四辺形で表示
'= (Windows2000以降)
'= (PlgBlt.bas)
'================================================================ #include "Windows.bi" #define BI_RGB 0 #define DIB_RGB_COLORS 0 'RGBカラーテーブル #define DIB_PAL_COLORS 1 'パレットカラーテーブル #define PATCOPY &HF00021 #define PATINVERT &H5A0049 #define PATPAINT &HFB0A09 Type POINTAPI x As Long y As Long End Type Type BITMAPINFOHEADER '40バイト biSize As Long biWidth As Long biHeight As Long biPlanes As Integer biBitCount As Integer biCompression As Long biSizeImage As Long biXPelsPerMeter As Long biYPelsPerMeter As Long biClrUsed As Long biClrImportant As Long End Type Type BITMAPINFO bmiHeader As BITMAPINFOHEADER End Type Type tBITMAP Header As BITMAPINFO Bytes(63) As byte End Type ' DIBとして定義されたパターンの論理ブラシを作成 Declare Function Api_CreateDIBPatternBrushPt& Lib "gdi32" Alias "CreateDIBPatternBrushPt" (lpPackedDIB As Any, ByVal iUsage&) ' 転送元DCの指定された四角形から、指定されたDCの指定した平行四辺形へ、カラーデータのビットブロック転送を行う Declare Function Api_PlgBlt& Lib "gdi32" Alias "PlgBlt" (ByVal hdcDest&, lpPoint As POINTAPI, ByVal hdcSrc&, ByVal nXSrc&, ByVal nYSrc&, ByVal nWidth&, ByVal nHeight&, ByVal hbmMask&, ByVal xMask&, ByVal yMask&) ' ビットパターンを作成 Declare Function Api_PatBlt& Lib "gdi32" Alias "PatBlt" (ByVal hDC&, ByVal x&, ByVal y&, ByVal nWidth&, ByVal nHeight&, ByVal dwRop&) ' 指定されたウィンドウのクライアント領域または画面全体を表すディスプレイデバイスコンテキストのハンドルを取得 Declare Function Api_GetDC& Lib "user32" Alias "GetDC" (ByVal hWnd&) ' デバイスコンテキストを解放 Declare Function Api_ReleaseDC& Lib "user32" Alias "ReleaseDC" (ByVal hWnd&, ByVal hDC&) ' 指定されたデバイスコンテキストのオブジェクトを選択 Declare Function Api_SelectObject& Lib "gdi32" Alias "SelectObject" (ByVal hDC&, ByVal hObject&) ' ペン、ブラシ、フォント、ビットマップ、リージョン、パレットのいずれかの論理オブジェクトを削除し、そのオブジェクトに関連付けられていたすべてのシステムリソースを解放。オブジェクトを削除した後は、指定されたハンドルは無効になる Declare Function Api_DeleteObject& Lib "gdi32" Alias "DeleteObject" (ByVal hObject&) '================================================================ '= '================================================================ Declare Sub Button1_on edecl () Sub Button1_on() cls Var hBrush As Long Var tBr As tBITMAP Var hOld As Long Var Pt(2) As POINTAPI Var Ret As Long Var hDC As Long '平行四辺形の傾き指定 Pt(0).x = Val(GetDlgItemText("Edit1")) '左上x(可変) Pt(0).y = Val(GetDlgItemText("Edit2")) ' 〃 y(可変) Pt(1).x = 300 '右上x Pt(1).y = 0 ' 〃 y Pt(2).x = 0 '左下x Pt(2).y = 300 ' 〃 y hDC = Api_GetDC(GethWnd) 'フォームのデバイスコンテキスト 'スクリーンショットのリサイズ Ret = Api_PlgBlt(hDC, Pt(0), Api_GetDC(0), 0, 0, GetDeviceCaps(8), GetDeviceCaps(10), ByVal 0&, ByVal 0&, ByVal 0&) 'tBITMAP構造体の初期化 tBr.Header.bmiHeader.biSize = Len(tBr.Header.bmiHeader) tBr.Header.bmiHeader.biCompression = BI_RGB tBr.Header.bmiHeader.biHeight = 8 tBr.Header.bmiHeader.biPlanes = 1 tBr.Header.bmiHeader.biWidth = 8 tBr.Header.bmiHeader.biBitCount = 1 For i = 0 To 7 tBr.Bytes(i) = 128 Next i hBrush = Api_CreateDIBPatternBrushPt(tBr, DIB_RGB_COLORS) 'パターンブラシ作成 hOld = Api_SelectObject(hDC, hBrush) 'フォームDCに対するBRUSH選択 Ret = Api_PatBlt(hDC, 0, 0, 30, 30, PATCOPY) 'パターンブロック転送 Ret = Api_DeleteObject(Api_SelectObject(hDC, hOld)) 'パターンブラシを元に戻す Ret = Api_ReleaseDC(GethWnd, hDC) End Sub '================================================================ '= '================================================================ While 1 WaitEvent Wend Stop End