WidenPath パスの境界を新規パスに変換

Cの宣言:

BOOL WidenPath(HDC hDC);

VBの宣言:

Declare Function WidenPath Lib "gdi32" (ByVal hDC As Long) As Long

説明:

選択されているパスを元に新規パスを作成する。新規パスの塗りつぶしの対象となる領域は、、選択されているペンで旧パスを描画した場合に描画される領域に等しい。

hDCで指定されたデバイスコンテキストに選択されているペンは、ExtCreatePenで作成したジオメトリックペンまたはCreatePenで作成した幅1以上のペンでなければならない。

パスに含まれるベジエ曲線は線分に分割される。

引数の意味は以下の通り。
hDC パスを選択しているデバイスコンテキストのハンドル。

戻り値は、関数の実行結果を表す真偽値である。

VBのサンプル:

三角形のパスを作成し、これをWidenPathによって三角形の枠線のパスに変換する。変換した図形をSelectClipPathによってクリッピングパスに指定し、複数の直線を描画してみて正しく意図したクリッピングが為されていることを確認する。
Private Sub Command1_Click()

    Dim I As Long
    Dim hPen As Long
    Dim hOldPen As Long

    Picture1.ScaleMode = vbPixels
    SetPolyFillMode Picture1.hDC, WINDING

    'パス用のペンの設定
    hPen = CreatePen(PS_SOLID, 20, vbWhite)
    hOldPen = SelectObject(Picture1.hDC, hPen)

    'パスブラケットのオープン
    BeginPath Picture1.hDC
    
    '三角形を描画
    MoveToEx Picture1.hDC, 100, 50, 0
    LineTo Picture1.hDC, 50, 150
    LineTo Picture1.hDC, 150, 150
    CloseFigure Picture1.hDC
    
    'パスブラケットのクローズ
    EndPath Picture1.hDC
    
    '(中空の)三角形をクリッピングパスとして設定する
    WidenPath Picture1.hDC
    SelectClipPath Picture1.hDC, RGN_COPY
    
    SelectObject Picture1.hDC, hOldPen
    DeleteObject hPen

    '集中線の描画
    For I = 1 To 400 Step 5
        Picture1.Line (0, 0)-(I, 400 - I)
    Next

End Sub

(original text:1999/09/08 更新)

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