円弧を描画 <TOP>
円弧を描画します。
GetSysColorシステムの背景色を取得
AngleArc 中心点と半径を指定して円・円弧を描画
GetArcDirection デバイスコンテキストに設定されている、円弧の現在の方向を取得
SetArcDirection デバイスコンテキストに設定されている、円弧の現在の方向を設定
ArcTo 楕円弧を描画
MoveToEx 現在位置を受け取るバッファを参照で指定
例ではリサイズする毎に、楕円弧・円弧を描画しています。
'================================================================ '= 円弧を描画 '================================================================ #include "Windows.bi" Type POINTAPI x As Long y As Long End Type ' システムの背景色を取得 Declare Function Api_GetSysColor& Lib "user32" Alias "GetSysColor" (ByVal nIndex&) ' 中心点と半径を指定して円・円弧を描画 Declare Function Api_AngleArc& Lib "gdi32" Alias "AngleArc" (ByVal hDC&, ByVal x&, ByVal y&, ByVal dwRadius&, ByVal eStartAngle!, ByVal eSweepAngle!) ' デバイスコンテキストに設定されている、円弧の現在の方向を取得 Declare Function Api_GetArcDirection& Lib "gdi32" Alias "GetArcDirection" (ByVal hDC&) ' デバイスコンテキストに設定されている、円弧の現在の方向を設定 Declare Function Api_SetArcDirection& Lib "gdi32" Alias "SetArcDirection" (ByVal hDC&, ByVal ArcDirection&) ' 楕円弧を描画 Declare Function Api_ArcTo& Lib "gdi32" Alias "ArcTo" (ByVal hDC&, ByVal X1&, ByVal Y1&, ByVal X2&, ByVal Y2&, ByVal X3&, ByVal Y3&, ByVal X4&, ByVal Y4&) ' 現在位置を受け取るバッファを参照で指定 Declare Function Api_MoveToEx& Lib "gdi32" Alias "MoveToEx" (ByVal hDC&, ByVal x&, ByVal y&, lpPoint As POINTAPI) ' 指定されたウィンドウのクライアント領域または画面全体を表すディスプレイデバイスコンテキストのハンドルを取得 Declare Function Api_GetDC& Lib "user32" Alias "GetDC" (ByVal hWnd&) ' デバイスコンテキストを解放 Declare Function Api_ReleaseDC& Lib "user32" Alias "ReleaseDC" (ByVal hWnd&, ByVal hDC&) #define COLOR_BTNFACE 15 'コマンドボタンの表面色 #define AD_CLOCKWISE 2 '時計回り #define AD_COUNTERCLOCKWISE 1 '反時計回り '================================================================ '= '================================================================ Declare Sub MainForm_Resize edecl () Sub MainForm_Resize() Var rgbColor As Long Var PT As POINTAPI Var hDC As Long Var Ret As Long rgbColor = Api_GetSysColor(COLOR_BTNFACE) SetBackColor rgbColor Cls ShowWindow -1 hDC = Api_GetDC(GethWnd) If APi_GetArcDirection(hDC) = AD_CLOCKWISE Then Ret = Api_SetArcDirection(hDC, AD_COUNTERCLOCKWISE) End If Ret = Api_MoveToEx(hDC, GetWidth - 20, GetHeight / 2, PT) Ret = Api_AngleArc(hDC, GetWidth / 2, GetHeight / 2, GetHeight / 2 - 20, 0, 180) Ret = Api_SetArcDirection(hDC, AD_CLOCKWISE) Ret = Api_ArcTo(hDC, 20, 0, GetWidth - 20, GetHeight, 0, GetHeight / 2, GetWidth, GetHeight / 2) Ret = Api_ReleaseDC(GethWnd, hDC) End Sub '================================================================ '= '================================================================ While 1 WaitEvent Wend Stop End