指定領域の周囲にブラシで境界線を描画 <TOP>
CreateEllipticRgn
楕円形のリージョンを作成
Ellipse
楕円の描画
CombineRgn
既存の二つの領域を結合して新しい領域を作成
FrameRgn
指定の領域の周囲に指定のブラシで境界線を描く
GetDC
デバイスコンテキストのハンドルを取得
GetStockObject
ストックオブジェクトのハンドルを取得
ReleaseDC
デバイスコンテキストを解放
DeleteObject
システムリソースを解放
'================================================================ '= 指定領域の周囲にブラシで境界線を描画
'= (FrameRgn.bas) '================================================================ #include "Windows.bi" ' 楕円形のリージョンを作成 Declare Function Api_CreateEllipticRgn& Lib "gdi32" Alias "CreateEllipticRgn" (ByVal nLeftRect&, ByVal nTopRect&, ByVal nRightRect&, ByVal nBottomRect&) ' 楕円の描画 Declare Function Api_Ellipse& Lib "gdi32" Alias "Ellipse" (ByVal hDC&, ByVal X1&, ByVal Y1&, ByVal X2&, ByVal Y2&) ' 既存の二つの領域を結合して新しい領域を作成 Declare Function Api_CombineRgn& Lib "gdi32" Alias "CombineRgn" (ByVal hRgnDest&, ByVal hRgnSrc1&, ByVal hRgnSrc2&, ByVal nCombineMode&) ' 指定の領域の周囲に指定のブラシで境界線を描く Declare Function Api_FrameRgn& Lib "gdi32" Alias "FrameRgn" (ByVal hDC&, ByVal hRgn&, ByVal hBrush&, ByVal nWidth&, ByVal nHeight&) ' 指定されたウィンドウのクライアント領域または画面全体を表すディスプレイデバイスコンテキストのハンドルを取得 Declare Function Api_GetDC& Lib "user32" Alias "GetDC" (ByVal hWnd&) ' ストックオブジェクトのハンドルを取得 Declare Function Api_GetStockObject& Lib "gdi32" Alias "GetStockObject" (ByVal nIndex&) ' デバイスコンテキストを解放 Declare Function Api_ReleaseDC& Lib "user32" Alias "ReleaseDC" (ByVal hWnd&, ByVal hDC&) ' 論理オブジェクトを削除し、そのオブジェクトに関連付けられていたすべてのシステムリソースを解放 Declare Function Api_DeleteObject& Lib "gdi32" Alias "DeleteObject" (ByVal hObject&) #define RGN_COPY 5 'HRGNSRC1のコピーを作成 #define RGN_DIFF 4 'HRGNSRC1からHRGNSRC2を除いた領域 #define RGN_OR 2 'リージョン同士のOR結合 #define RGN_XOR 3 'リージョン同士のXOR結合 #define BLACK_BRUSH 4 '黒 #define DKGRAY_BRUSH 3 '暗い灰色 #define GRAY_BRUSH 2 '灰色 #define LTGRAY_BRUSH 1 '明るい灰色 #define WHITE_BRUSH 0 '白 Var Shared Picture1 As Object Var Shared Combo1 As Object Var Shared Button1 As Object Picture1.Attach GetDlgItem("Picture1") : Picture1.SetFontSize 14 Combo1.Attach GetDlgItem("Combo1") : Combo1.SetFontSize 14 Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14 '================================================================ '= '================================================================ Declare Sub MainForm_Start edecl () Sub MainForm_Start() Combo1.AddString "RGN_DIFF" Combo1.AddString "RGN_OR" Combo1.AddString "RGN_XOR" Combo1.AddString "Ellipse" End Sub '================================================================ '= '================================================================ Declare Sub Button1_on edecl () Sub Button1_on() Var hDC As Long Var hRgn1 As Long Var hRgn2 As Long Var Ret As Long hDC = Api_GetDC(Picture1.GethWnd) 'リージョンを作成 hRgn1 = Api_CreateEllipticRgn(50, 0, 160, 80) hRgn2 = Api_CreateEllipticRgn(0, 40, 210, 140) Picture1.Cls 'リージョンを結合・楕円描画 Select Case Combo1.GetCursel Case 0 Ret = Api_CombineRgn(hRgn1, hRgn1, hRgn2, RGN_DIFF) Ret = Api_FrameRgn(hDC, hRgn1, Api_GetStockObject(DKGRAY_BRUSH), 10, 10) Case 1 Ret = Api_CombineRgn(hRgn1, hRgn1, hRgn2, RGN_OR) Ret = Api_FrameRgn(hDC, hRgn1, Api_GetStockObject(GRAY_BRUSH), 2, 10) Case 2 Ret = Api_CombineRgn(hRgn1, hRgn1, hRgn2, RGN_XOR) Ret = Api_FrameRgn(hDC, hRgn1, Api_GetStockObject(WHITE_BRUSH), 10, 2) Case Else Ret = Api_Ellipse(hDC, 50, 0, 160, 80) Ret = Api_Ellipse(hDC, 0, 40, 210, 140) End Select '後処理 Ret = Api_DeleteObject(hRgn1) Ret = Api_DeleteObject(hRgn2) Ret = Api_ReleaseDC(Picture1.GethWnd, hDC) End Sub '================================================================ '= '================================================================ While 1 WaitEvent Wend Stop End