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

円・円弧を描画してみます。
キーワードは「Arc()関数」です。
Arc()関数は円を包含する矩形を指定して、その中に開始点と終点を
指定することで円・円弧を描画する関数です。
基本的には反時計回りで描画されますが、SetArcDirection()関数を使えば時計回りにすることができます。
円グラフなどに使えます。

実行時の様子

'円弧を描画する
Private Declare Function Arc Lib "gdi32.dll" (ByVal hdc As Long, _
    ByVal nLeftRect As Long, ByVal nTopRect As Long, ByVal nRightRect As Long, _
    ByVal nBottomRect As Long, ByVal nXStartArc As Long, ByVal nYStartArc As Long, _
    ByVal nXEndArc As Long, ByVal nYEndArc 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 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 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) .ForeColor = vbRed 'ペンの色 '円弧を描画 Call Arc(.hdc, 10, 10, .ScaleWidth - 10, .ScaleHeight - 10, _ (.ScaleWidth - 20) / 2 + 10, 10, .ScaleWidth - 10, (.ScaleHeight - 20) / 2 + 10) End With End Sub
ダウンロード