連続した直線を描画(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