ベジェ曲線の描画(U)          <TOP>


連続したベジェ曲線を描画します。

PolyBezierTo ベジェ曲線を描画。開始点はカレントポジションを使用し最後に描画したベジェ曲線の終了点にカレントポジションを設定

MoveToEx 現在位置を受け取るバッファを参照で指定

 

例では、開始座標をMoveToExで設定しています。数値は配列の座標を表しています。

 

'================================================================
'= ベジェ曲線の描画(U)
'=    (PolyBezierTo.bas)
'================================================================
#include "Windows.bi"

Type POINTAPI
    x As Long
    y As Long
End Type

' ベジェ曲線を描画。開始点はカレントポジションを使用し最後に描画したベジェ曲線の終了点にカレントポジションを設定
Declare Function Api_PolyBezierTo& Lib "gdi32" Alias "PolyBezierTo" (ByVal hDC&, lppt As POINTAPI, ByVal cCount&)

' 現在位置を受け取るバッファを参照で指定
Declare Function Api_MoveToEx& Lib "gdi32" Alias "MoveToEx" (ByVal hDC&, ByVal x&, ByVal y&, ByVal lpPoint As Any)

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

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

'================================================================
'=
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()
    Var pts(5) As POINTAPI
    Var hDC As Long
    Var Ret As Long

    For x = 0 To GetWidth Step 10
        Line(x, 0) - (x, GetHeight), , 14
    Next
    For y = 0 To GetHeight Step 10
        Line(0, y) - (GetWidth, y), , 14
    Next

    hDC = Api_GetDC(GethWnd)

    pts(0).x = 10  : pts(0).y = 50
    pts(1).x = 200 : pts(1).y = 20
    pts(2).x = 40  : pts(2).y = 120
    pts(3).x = 100 : pts(3).y = 250
    pts(4).x = 150 : pts(4).y = 60
    pts(5).x = 230 : pts(5).y = 120

    Ret = Api_MoveToEx(hDC, 10, 50, ByVal 0)
    Ret = Api_PolyBezierTo(hDC, pts(0), 6)

    GoSub *DrawPointAndLine

    Ret = Api_ReleaseDC(GethWnd, hDC)
    Exit Sub

    *DrawPointAndLine
    Pset(pts(0).x, pts(0).y)

    For i = 1 To 5
        Connect(pts(i - 1).x, pts(i - 1).y) - (pts(i).x, pts(i).y), 5
    Next

    SetDrawWidth 3

    For i = 0 To 5
        Pset(pts(i).x, pts(i).y), 5
        Symbol(pts(i).x - 1, pts(i).y + 2), Trim$(Str$(i)), 1, 1
    Next

    SetDrawWidth 0
    Return
End Sub

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