● 連続した線分を一括して描画する ●

折れ線グラフを作るときなんかに使用しそうだ。使う機会が無いな〜。それより構造体の配列を自作関数やAPI関数に引数として渡すサンプルと言った方が利便性があるように聞こえる(笑) フォームモジュールにコピペして実行するべし。今回は標準モジュールの使用は無い。

Private Type POINTAPI
    x As Long
    y As Long
End Type

'連続した線分を一括して描画する
Private Declare Function Polyline Lib "gdi32" (ByVal hDC As Long, lpPoint As POINTAPI, ByVal nCount As Long) As Long

'-----------------------------------------------------------------------
' 関数名 : DrawPolyline
' 機能   : 線分を描画する
' 引数   : (in) hDC … デバイスコンテキストのハンドル
'           (in) udtPointAPI … POINTAPI構造体の配列
' 戻り値 : 1…正常終了   0…異常終了
'-----------------------------------------------------------------------
Private Function DrawPolyline(ByVal hDC As Long, _
                             ByRef udtPointAPI() As POINTAPI) As Long

    DrawPolyline = Polyline(hDC, udtPointAPI(0), UBound(udtPointAPI))

End Function

Private Sub Form_Load()

    Dim udtP(9) As POINTAPI

    With Me
        .Cls
        .ScaleMode = vbPixels
        .AutoRedraw = True

        udtP(0).x = 60: udtP(0).y = 68
        udtP(1).x = 10: udtP(1).y = 30
        udtP(2).x = 10: udtP(2).y = 68
        udtP(3).x = 60: udtP(3).y = 68
        udtP(4).x = 60: udtP(4).y = 30
        udtP(5).x = 35: udtP(5).y = 5
        udtP(6).x = 10: udtP(6).y = 30
        udtP(7).x = 60: udtP(7).y = 30
        udtP(8).x = 10: udtP(8).y = 68
        udtP(9).x = 60: udtP(9).y = 68

        '線分を描画する
        Call DrawPolyline(.hDC, udtP())

        .Refresh
    End With

End Sub


↓こういうことも出来るようだ。

'連続した線分を一括して描画する
Private Declare Function Polyline Lib "gdi32" (ByVal hDC As Long, lpPoint As Any, ByVal nCount As Long) As Long

'-----------------------------------------------------------------------
' 関数名 : DrawPolyline
' 機能   : 線分を描画する
' 引数   : (in) hDC … デバイスコンテキストのハンドル
'           (in) udtPointAPI … POINTAPI構造体の配列
' 戻り値 : 1…正常終了   0…異常終了
'-----------------------------------------------------------------------
Private Function DrawPolyline(ByVal hDC As Long, _
                             ByRef Pos() As Long) As Long

    DrawPolyline = Polyline(hDC, Pos(0, 0), UBound(Pos, 2))

End Function

Private Sub Form_Load()

    Dim Pos(1, 9) As Long

    With Me
        .Cls
        .ScaleMode = vbPixels
        .AutoRedraw = True

        Pos(0, 0) = 60: Pos(1, 0) = 68
        Pos(0, 1) = 10: Pos(1, 1) = 30
        Pos(0, 2) = 10: Pos(1, 2) = 68
        Pos(0, 3) = 60: Pos(1, 3) = 68
        Pos(0, 4) = 60: Pos(1, 4) = 30
        Pos(0, 5) = 35: Pos(1, 5) = 5
        Pos(0, 6) = 10: Pos(1, 6) = 30
        Pos(0, 7) = 60: Pos(1, 7) = 30
        Pos(0, 8) = 10: Pos(1, 8) = 68
        Pos(0, 9) = 60: Pos(1, 9) = 68

        '線分を描画する
        Call DrawPolyline(.hDC, Pos())

        .Refresh
    End With

End Sub

戻る