多角形のリージョンとウィンドウ領域          <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