CreatePolygonRgn 多角形のリージョンを作成

Cの宣言:

HRGN CreatePolygonRgn(
	CONST POINT *PointArray,
	int PointNum,
	PolyFillMode);

VBの宣言:

Declare Function CreatePolygonRgn Lib "gdi32" ( _
    ByRef PointArray As POINT, _
    ByVal PointNum As Long, _
    ByVal PolyFillMode As Long) As Long

説明:

指定された頂点で構成される多角形のリージョンを作成する。

引数の意味は以下の通り。
PointArray 多角形の各頂点の座標の配列。
PointNum 多角形の頂点の個数。
PolyFillMode リージョンの描画の際の塗りつぶしモード。後述の表を参照。

PolyFillModeには、以下のいずれかのフラグを指定可能。
ALTERNAME 交互モード。水平線と交わる各線分について、奇数番目の線分と偶数番目の線分の間に位置する領域のみ塗りつぶしが行われる。
WINDING 全域モード。すべての領域が塗りつぶされる。

戻り値は、作成されたリージョンのハンドルである。関数の実行に失敗した場合、NULLが返される。

VBのサンプル:

CreatePolygonRgnを使用して星型のリージョンを作成し、ピクチャボックスに描画する。
' 星の描画
Private Sub Command1_Click()

    Const POINT_NUM As Long = 5
    Const PI As Single = 3.14159
    
    Dim p(POINT_NUM - 1) As POINT
    Dim hRgn As Long
    Dim I As Long
    
    '星型リージョン作成用データ初期化
    For I = 0 To POINT_NUM - 1
        p(I).X = 100 * Cos(2 * PI * I * 2 / POINT_NUM) + 100
        p(I).Y = 100 * Sin(2 * PI * I * 2 / POINT_NUM) + 100
    Next
    
    'リージョンの作成
    hRgn = CreatePolygonRgn(p(0), POINT_NUM, ALTERNATE)
    
    'リージョンの描画
    FillRgn Picture1.hDC, hRgn, GetStockObject(WHITE_BRUSH)

    'リージョンの破棄
    DeleteObject hRgn
    
End Sub

(original text:2000/02/13 更新)

本ドキュメントの内容は保証しません。本ドキュメントによって生じた結果について、一切の責任を負いません。