円・円弧を描画するには(塗りつぶしあり)

円・円弧を描画してみます。
キーワードは「Chord()関数」です。
Chord()関数は円を包含する矩形を指定して、その中に開始点と終点を
指定することで円・円弧を描画する関数です。
サンプル45のArc()関数との違いは塗りつぶしが行われることです。
塗りつぶしはデバイスコンテキストに関連付けられているブラシを使用します。
基本的には反時計回りで描画されますが、SetArcDirection()関数を使えば時計回りにすることができます。
円グラフなどに使えます。

実行時の様子

'コード(円弧と線分からなる半月形)を描画する
Private Declare Function Chord Lib "gdi32.dll" _
    (ByVal hdc As Long, ByVal nLeftRect As Long, ByVal nTopRect As Long, _
    ByVal nRightRect As Long, ByVal nBottomRect As Long, _
    ByVal nXRadial1 As Long, ByVal nYRadial1 As Long, _
    ByVal nXRadial2 As Long, ByVal nYRadial2 As Long) As Long
'現在の位置を変更する
Private Declare Function MoveToEx Lib "gdi32.dll" _
    (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal lpCoord As Long) As Long
Private Type RECT
    x As Long
    y As Long
    dx As Long
    dy As Long
End Type
'矩形の周囲に指定のブラシで境界線を書く
Private Declare Function FrameRect Lib "user32.dll" _
        (ByVal hdc As Long, lpRect As RECT, ByVal hbr As Long) As Long
'デバイスコンテキストにオブジェクトを選択する
Private Declare Function SelectObject Lib "gdi32.dll" _
    (ByVal hdc As Long, ByVal hgdiobj As Long) As Long
'グラフィックスオブジェクトを削除し、システムリソースを開放する
Private Declare Function DeleteObject Lib "gdi32.dll" (ByVal hObject As Long) As Long
'ソリッドカラー(純色)で論理ブラシを作成する
Private Declare Function CreateSolidBrush Lib "gdi32.dll" _
    (ByVal crColor As Long) As Long

Private Sub Form_Load() Me.Picture1.ScaleMode = 3 'ピクセルモード End Sub
Private Sub Picture1_Paint() Dim lpRect As RECT, hbr As Long, hOld As Long With Me.Picture1 .BackColor = vbWhite '背景色 '枠線を描画 lpRect.x = 10 lpRect.y = 10 lpRect.dx = .ScaleWidth - 10 lpRect.dy = .ScaleHeight - 10 hbr = CreateSolidBrush(RGB(180, 180, 180)) Call FrameRect(.hdc, lpRect, hbr) Call DeleteObject(hbr) hbr = CreateSolidBrush(RGB(255, 161, 192)) hOld = SelectObject(.hdc, hbr) 'ブラシの関連付け .ForeColor = vbRed 'ペンの色 '円弧を描画 Call Chord(.hdc, 10, 10, .ScaleWidth - 10, .ScaleHeight - 10, _ (.ScaleWidth - 20) / 2 + 10, 10, .ScaleWidth - 10, (.ScaleHeight - 20) / 2 + 10) Call SelectObject(.hdc, hOld) Call DeleteObject(hbr) End With End Sub
ダウンロード