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

円・楕円を描画してみます。
キーワードは「Ellipse()関数」です。
Ellipse()関数は円を包含する矩形を指定することで円・楕円を描画する関数です。
矩形を定義するだけで円を描画できるので何かと役に立ちます。

実行時の様子

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