連続した直線を描画(V)
<TOP>連続した直線を描画します。例では1〜12月の折れ線グラフのつもりです。
Polyline 複数の線分からなる連続した線を描画
GetDC デバイスコンテキストのハンドルを取得
ReleaseDC デバイスコンテキストを解放
'================================================================ '= 連続した直線を描画(V)
'= (Polyline3.bas) '================================================================ #include "Windows.bi" Type POINTAPI x As Long y As Long End Type ' 複数の線分からなる連続した線を描画(実行後はペンの現在位置が変更されない) Declare Function Api_Polyline& Lib "gdi32" Alias "Polyline" (ByVal hDC&, lpPoint As POINTAPI, ByVal nCount&) ' 指定されたウィンドウのクライアント領域または画面全体を表すディスプレイデバイスコンテキストのハンドルを取得 Declare Function Api_GetDC& Lib "user32" Alias "GetDC" (ByVal hWnd&) ' デバイスコンテキストを解放 Declare Function Api_ReleaseDC& Lib "user32" Alias "ReleaseDC" (ByVal hWnd&, ByVal hDC&) Var Shared pa(11) As POINTAPI Var Shared Picture1 As Object Picture1.Attach GetDlgItem("Picture1") '================================================================ '= '================================================================ Declare Sub Button1_on edecl () Sub Button1_on() Var phDC As Long Var mm As Integer Var Corner As Long Var Ret As Long Randomize Time 'Picture1のデバイスコンテキスト phDC = Api_GetDC(Picture1.GethWnd) '連続直線の点の数 Corner = 12 '連続線分の座標 Picture1.Cls Picture1.SetDrawWidth 3 For mm = 0 To 11 pa(mm).x = (mm + 1) * 20 - 15 pa(mm).y = Rnd(1) * 70 Picture1.Pset(pa(mm).x, pa(mm).y), 0 Picture1.Symbol(pa(mm).x - 4, pa(mm).y + 4), Trim$(Str$(mm + 1)), 1, 1, 5 Next Picture1.SetDrawWidth 0 '連続した線分を描画 Ret = Api_Polyline(phDC, pa(0), Corner) End Sub '================================================================ '= '================================================================ Declare Sub MainForm_QueryClose edecl () Sub MainForm_QueryClose() Var Ret As Long Ret = Api_ReleaseDC(Picture1.GethWnd, phDC) End End Sub '================================================================ '= '================================================================ While 1 WaitEvent Wend Stop End