連続した直線を描画(U)
<TOP>連続した直線を描画します。
CreatePolygonRgn 多角形のリージョンを作成
SetWindowRgn 指定の領域をウィンドウ領域として設定
Polyline 複数の線分からなる連続した線を描画
GetDC デバイスコンテキストのハンドルを取得
ReleaseDC デバイスコンテキストを解放
例では逆三角形を描画し、「Region」でその領域をウィンドウ領域に設定しています。
'================================================================ '= 連続した直線を描画
'= (Polyline2.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 hWnd&, 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 Points(4) As POINTAPI Var Shared hDC As Long '================================================================ '= '================================================================ Declare Sub MainForm_Start edecl () Sub MainForm_Start() hDC = Api_GetDC(GethWnd) Points(1).X = 150 Points(1).Y = 150 Points(2).X = 0 Points(2).Y = 0 Points(3).X = 300 Points(3).Y = 0 Points(4).X = 150 Points(4).Y = 150 End Sub '================================================================ '= '================================================================ Declare Sub Button1_on edecl () Sub Button1_on() Var Ret As Long Ret = Api_Polyline(hDC, Points(1), 4) End Sub '================================================================ '= '================================================================ Declare Sub Button2_on edecl () Sub Button2_on() Var hRgn As Long hRgn = Api_CreatePolygonRgn(Points(1), 4, 1) Ret = Api_SetWindowRgn(GethWnd, hRgn, True) End Sub '================================================================ '= '================================================================ Declare Sub Button3_on edecl () Sub Button3_on() Var Ret As Long Ret = Api_SetWindowRgn(GethWnd, 0, True) End Sub '================================================================ '= '================================================================ Declare Sub MainForm_QueryClose edecl () Sub MainForm_QueryClose() Var Ret As Long Ret = Api_ReleaseDC(hWnd, hDC) End Sub '================================================================ '= '================================================================ While 1 WaitEvent Wend Stop End