多角形のリージョンとウィンドウ領域 <TOP>
CreatePolygonRgn 多角形のリージョンを作成
SetWindowRgn 指定の領域をウィンドウ領域として設定
Polyline 複数の線分からなる連続した線を描画
GetDC デバイスコンテキストのハンドルを取得
ReleaseDC デバイスコンテキストの解放
'================================================================ '= 多角形のリージョンとウィンドウ領域
'= (CreatePolygonRgn.bas) '================================================================ #include "Windows.bi" Type POINTAPI X As Long Y As Long End Type ' 多角形のリージョンを作成 Declare Function Api_CreatePolygonRgn& Lib "gdi32" Alias "CreatePolygonRgn" (lppt As POINTAPI, ByVal nCount&, ByVal nPolyFillMode&) ' 指定の領域をウィンドウ領域として設定 Declare Function Api_SetWindowRgn& Lib "user32" Alias "SetWindowRgn" (ByVal hWnd&, ByVal hRgn&, ByVal bRedraw&) ' 複数の線分からなる連続した線を描画(実行後はペンの現在位置が変更されない) Declare Function Api_Polyline& Lib "gdi32" Alias "Polyline" (ByVal hDC&, lpPoint As POINTAPI, ByVal nCount&) ' 指定されたウィンドウのクライアント領域または画面全体を表すディスプレイデバイスコンテキストのハンドルを取得 Declare Function Api_GetDC& Lib "user32" Alias "GetDC" (ByVal hWnd&) ' デバイスコンテキストを解放 Declare Function Api_ReleaseDC& Lib "user32" Alias "ReleaseDC" (ByVal hWnd&, ByVal hDC&) Var Shared Button1 As Object Var Shared Button2 As Object Var Shared Button3 As Object Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14 Button2.Attach GetDlgItem("Button2") : Button2.SetFontSize 14 Button3.Attach GetDlgItem("Button3") : Button3.SetFontSize 14 Var Shared pt(3) As POINTAPI Var Shared hDC As Long '================================================================ '= '================================================================ Declare Sub MainForm_Start edecl () Sub MainForm_Start() hDC = Api_GetDC(GethWnd) pt(0).X = 250 pt(0).Y = 200 pt(1).X = 10 pt(1).Y = 50 pt(2).X = 250 pt(2).Y = 0 pt(3).X = 250 pt(3).Y = 200 End Sub '================================================================ '= '================================================================ Declare Sub Button1_on edecl () Sub Button1_on() Var i As Integer Var Ret As Long Ret = Api_Polyline(hDC, pt(0), 3) SetDrawWidth 5 For i = 0 To 3 Pset(pt(i).X, pt(i).Y), 5 Symbol(pt(i).X - 4, pt(i).Y + 4), "(" & Trim$(Str$(pt(i).X)) & "," & Trim$(Str$(pt(i).Y)) & ")", 1, 1 Next SetDrawWidth 0 End Sub '================================================================ '= '================================================================ Declare Sub Button2_on edecl () Sub Button2_on() Var hRgn As Long Var Ret As Long hRgn = Api_CreatePolygonRgn(pt(0), 3, 1) Ret = Api_SetWindowRgn(GethWnd, hRgn, True) End Sub '================================================================ '= '================================================================ Declare Sub Button3_on edecl () Sub Button3_on() Var Ret As Long Cls Ret = Api_SetWindowRgn(GethWnd, 0, True) End Sub '================================================================ '= '================================================================ Declare Sub MainForm_DblClick edecl () Sub MainForm_DblClick() Var Ret As Long Ret = Api_ReleaseDC(GethWnd, hDC) End End Sub '================================================================ '= '================================================================ While 1 WaitEvent Wend Stop End