直線軌跡の座標の取得
時として座標から座標への点が必要になることがありませんか? LineDDA API で開始点から終了点までの全座標を取得することができます。 ただし、AddressOf 演算子を使いますので Vb5以降でないと動作しません。 *----*----*----*----*----*----*----*----*----*----*----* サンプルとして二等辺三角形の周囲に赤色で点を表示してみます。 標準モジュールを準備し下記コードを貼りつけて下さい。 Option Explicit Public Sub LineDDAProc(ByVal x As Long, ByVal y As Long, ByVal lParam As Long) Form1.vbLineDDAProc x, y End Sub フォームモジュールを準備し下記コードを貼りつけて下さい。 Option Explicit Private Type POINTAPI x As Long y As Long End Type Private Declare Function LineDDA Lib "gdi32" (ByVal n1 As Long, ByVal n2 As Long, ByVal n3 As Long, ByVal n4 As Long, ByVal lpLineDDAProc As Long, ByVal lParam As Long) As Long Private Declare Function SetPixel Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal crColor As Long) As Long Public Sub vbLineDDAProc(ByVal x As Long, ByVal y As Long) SetPixel Me.hdc, x, y, vbRed End Sub Private Sub Form_Click() Dim ptc As POINTAPI, apt(0 To 2) As POINTAPI ptc.x = Me.ScaleWidth \ Screen.TwipsPerPixelX \ 2 ptc.y = Me.ScaleHeight \ Screen.TwipsPerPixelY \ 2 apt(0).x = 0 apt(0).y = -40 apt(1).x = -40 apt(1).y = 40 apt(2).x = 40 apt(2).y = 40 LineDDA apt(0).x + ptc.x, apt(0).y + ptc.y, apt(1).x + ptc.x, apt(1).y + ptc.y, AddressOf LineDDAProc, 0 LineDDA apt(1).x + ptc.x, apt(1).y + ptc.y, apt(2).x + ptc.x, apt(2).y + ptc.y, AddressOf LineDDAProc, 0 LineDDA apt(2).x + ptc.x, apt(2).y + ptc.y, apt(0).x + ptc.x, apt(0).y + ptc.y, AddressOf LineDDAProc, 0 End Sub [F5]を押し実行して見て下さい。 標準モジュールにある LineDDAProc 関数は任意の関数名でも構いません。 |
動作確認
Windows95 + Visual Basic 5このサンプルを使用しての感想や、質問は 掲示板や、 らくがき帳に書きとめて頂けるとうれしいです。