領域内の色を反転する <TOP>
領域内の色を反転します。
CreateEllipticRgn 楕円形のリージョンを作成
InvertRgn 指定されたリージョン領域の色を反転
CreateHatchBrush ハッチパターンの論理ブラシを作成
FillRgn 指定のブラシで領域を塗りつぶす
DeleteObject 論理オブジェクトを削除
例では、起動時ハッチブラシで塗り潰した楕円形を表示させ、ボタンクリックでその領域の色を反転します。
'================================================================ '= 領域内の色を反転する
'= (InvertRgn.bas) '================================================================ #include "Windows.bi" ' 楕円形のリージョンを作成 Declare Function Api_CreateEllipticRgn& Lib "gdi32" Alias "CreateEllipticRgn" (ByVal nLeftRect&, ByVal nTopRect&, ByVal nRightRect&, ByVal nBottomRect&) ' 指定されたリージョン領域の色を反転 Declare Function Api_InvertRgn& Lib "gdi32" Alias "InvertRgn" (ByVal hDC&, ByVal hRgn&) ' ハッチパターンの論理ブラシを作成 Declare Function Api_CreateHatchBrush& Lib "gdi32" Alias "CreateHatchBrush" (ByVal nIndex&, ByVal crColor&) ' 指定のブラシで領域を塗りつぶす Declare Function Api_FillRgn& Lib "gdi32" Alias "FillRgn" (ByVal hDC&, ByVal hRgn&, ByVal hBrush&) ' ペン、ブラシ、フォント、ビットマップ、リージョン、パレットのいずれかの論理オブジェクトを削除し、そのオブジェクトに関連付けられていたすべてのシステムリソースを解放。オブジェクトを削除した後は、指定されたハンドルは無効になる Declare Function Api_DeleteObject& Lib "gdi32" Alias "DeleteObject" (ByVal hObject&) ' 指定されたウィンドウのクライアント領域または画面全体を表すディスプレイデバイスコンテキストのハンドルを取得 Declare Function Api_GetDC& Lib "user32" Alias "GetDC" (ByVal hWnd&) ' デバイスコンテキストを解放 Declare Function Api_ReleaseDC& Lib "user32" Alias "ReleaseDC" (ByVal hWnd&, ByVal hDC&) #define HS_DIAGCROSS 5 '45度のクロスハッチ Var Shared Button1 As Object Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14 Var Shared hDC As Long Var Shared FG As Integer '================================================================ '= '================================================================ Declare Sub MainForm_Start edecl () Sub MainForm_Start() Var hRgn As Long Var hBr As Long Var Ret As Long FG = 0 Button1.SetWindowText "現在 Normal" hDC = Api_GetDC(GethWnd) hRgn = Api_CreateEllipticRgn(20, 10, 210, 100) hBr = Api_CreateHatchBrush(HS_DIAGCROSS, RGB(255, 0, 0)) Ret = Api_FillRgn(hDC, hRgn, hBr) End Sub '================================================================ '= '================================================================ Declare Sub Button1_on edecl () Sub Button1_on() Var hRgn As Long Var Ret As Long FG = not FG If FG = 0 Then Button1.SetWindowText "現在 Normal" Else Button1.SetWindowText "現在 InvertRgn" End If hRgn = Api_CreateEllipticRgn(20, 10, 210, 100) Ret = Api_InvertRgn(hDC, hRgn) Ret = Api_DeleteObject(hRgn) End Sub '================================================================ '= '================================================================ Declare Sub MainForm_QueryClose edecl () Sub MainForm_QueryClose() Var Ret As Long Ret = Api_ReleaseDC(GethWnd, hDC) End Sub '================================================================ '= '================================================================ While 1 WaitEvent Wend Stop End