楕円弧を描く          <TOP>


フォームとPictureに楕円弧をテスト描画しています。x,yの各位置を把握するためグリッドを描いています。

Arc 楕円弧を描く

 

Declare Function Api_Arc& lib "gdi32" alias "Arc" (byval hDC&, byval X1&, byval Y1&, byval X2&, byval Y2&, byval X3&, byval Y3&, byval X4&, byval Y4&)

X1 楕円に外接する長方形の水平位置
Y1 楕円に外接する長方形の垂直位置
X2 楕円に外接する長方形の水平位置
Y2 楕円に外接する長方形の垂直位置
X3 弧の始点位置の水平位置
Y3 弧の始点位置の垂直位置
X4 弧の終了位置の水平位置
Y4 弧の終了位置の垂直位置
 

'================================================================
'= 楕円弧を描く
'=    (Arc.bas)
'================================================================
#include "Windows.bi"

' 楕円を描画
Declare Function Api_Arc& Lib "gdi32" Alias "Arc" (ByVal hDC&, ByVal X1&, ByVal Y1&, ByVal X2&, ByVal Y2&, ByVal X3&, ByVal Y3&, ByVal X4&, ByVal Y4&)

' 指定されたウィンドウのクライアント領域または画面全体を表すディスプレイデバイスコンテキストのハンドルを取得
Declare Function Api_GetDC& Lib "user32" Alias "GetDC" (ByVal hWnd&)

' デバイスコンテキストを解放
Declare Function Api_ReleaseDC& Lib "user32" Alias "ReleaseDC" (ByVal hWnd&, ByVal hDC&)

Var Shared Picture1 As Object

Picture1.Attach GetDlgItem("Picture1")

'================================================================
'=
'================================================================
Declare Sub MainForm_Start edecl ()
Sub MainForm_Start()
    Var hDC As Long
    Var Ret As Long

    For i = 0 To 149 Step 4
        Line(i, 0) - (i, 150), , 1
        Line(0, i) - (150, i), , 1
    Next
        
    'フォームに描画
    hDC = Api_GetDC(GethWnd)
    Ret = Api_Arc(hDC, 0, 0, 100, 100, 100, 50, 50, 100)
    Ret = Api_Arc(hDC, 50, 50, 150, 150, 50, 100, 100, 50)
    Ret = Api_ReleaseDC(GethWnd, hDC)

    'ピクチャボックスに描画
    hDC = Api_GetDC(Picture1.GethWnd)
    Ret = Api_Arc(hDC, 0, 0, 100, 100, 100, 50, 50, 100)
    Ret = Api_Arc(hDC, 50, 50, 150, 150, 50, 100, 100, 50)
    Ret = Api_ReleaseDC(Picture1.GethWnd, hDC)
End Sub

'================================================================
'=
'================================================================
While 1
    WaitEvent
Wend
Stop
End