SetMiterLimit マイター限界の設定

Cの宣言:

SetMiterLimit(HDC hDC, FLOAT NewLimit, PFLOAT OldLimit);

VBの宣言:

Declare Function SetMiterLimit Lib "gdi32" ( _
    ByVal hDC As Long, _
    ByVal NewLimit As Single, _
    ByRef OldLimit As Single) As Long

説明:

hDCで指定したデバイスコンテキストのマイター限界を設定する。

引数の意味は以下の通り。
hDC (IN) デバイスコンテキストのハンドル。
NewLimit (IN) 新規マイター限界。
OldLimit (OUT) 旧マイター限界。

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

VBのサンプル:

ぎざぎざの線を描画する。各線分はマイター接合で接合されているが、SetMiterLimitによって30度以下の角度の角はベベル接合で接合するようにする。
Private Sub Command1_Click()

    Const PI As Single = 3.14159
    Dim hOldPen As Long
    Dim hPen As Long
    Dim Log As LOGBRUSH
    Dim I As Long
    Dim NewLimit As Single
    Dim OldLimit As Single
    
    Log.lbStyle = BS_SOLID
    Log.lbColor = vbWhite
    Log.lbHatch = 0
    
    'パスブラケットのオープン
    BeginPath Picture1.hDC
    
    'ぎざぎざの線を描画
    MoveToEx Picture1.hDC, 0, 60, 0

    For I = 0 To 2
        LineTo Picture1.hDC, -10 * I * I + 60 * I + 50, 20
        LineTo Picture1.hDC, -10 * I * I + 60 * I + 100, 60
    Next
    
    'パスブラケットの終了
    EndPath Picture1.hDC
    
    'ペンの作成
    hPen = ExtCreatePen( _
        PS_GEOMETRIC Or PS_SOLID Or PS_ENDCAP_FLAT Or PS_JOIN_MITER, _
        10, Log, 0, 0)

    hOldPen = SelectObject(Picture1.hDC, hPen)
   
    'マイター限界の設定
    NewLimit = 1 / Sin(PI / 12)
    SetMiterLimit Picture1.hDC, NewLimit, OldLimit
    
    'パスの描画
    StrokePath Picture1.hDC
    
    '後処理
    SelectObject Picture1.hDC, hOldPen
    DeleteObject hPen

End Sub

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

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