プロジェクトエディターにてウインドウを作成。
  • プロジェクト名 = hiraiGDI


'-----------------------------------------------------------------------------
' イベント プロシージャ
'-----------------------------------------------------------------------------
' このファイルには、ウィンドウ [MainWnd] に関するイベントをコーディングします。
' ウィンドウ ハンドル: hMainWnd

' TODO: この位置にグローバルな変数、構造体、定数、関数を定義します。
Const ToRad(x) = (x * 3.14/180)

Class HIRAIGDI
Private
hwnd As HWND
hdc As HDC
hmdc As HDC
hbmp As HBITMAP
hobmp As HBITMAP
hpen As HPEN
hopen As HPEN
hbr As HBRUSH
hobr As HBRUSH
rc As RECT
pencolor As DWord
brushcolor As DWord
Public
Sub init(hwnd As HWND)
this.hwnd = hwnd
hdc = GetDC(this.hwnd)
hmdc = CreateCompatibleDC(hdc)
GetClientRect(hwnd,rc)
hbmp = CreateCompatibleBitmap(hdc,rc.right,rc.bottom)
hobmp=SelectObject(hmdc,hbmp)

pencolor = RGB(255,255,255)
brushcolor = RGB(30,60,50)
hpen = CreatePen(PS_SOLID,1,pencolor)
hopen=SelectObject(hmdc,hpen)
hbr = CreateSolidBrush(brushcolor)
hobr=SelectObject(hmdc,hbr)
End Sub

Sub delete()
SelectObject(hmdc,hopen)
SelectObject(hmdc,hobr)
SelectObject(hmdc,hbmp)
DeleteObject(hbr)
DeleteObject(hpen)
DeleteObject(hbmp)
DeleteObject(hmdc)
ReleaseDC(hwnd,hdc)
End Sub

Sub show()
BitBlt(hdc,0,0,rc.right,rc.bottom,hmdc,0,0,SRCCOPY)
End Sub

Sub polyline(pp As *POINTAPI, n As DWord)
Polyline(hmdc,pp[0],n)
End Sub
End Class

Dim hg As HIRAIGDI

'-----------------------------------------------------------------------------
' ウィンドウメッセージを処理するためのコールバック関数

Function MainWndProc(hWnd As HWND, dwMsg As DWord, wParam As WPARAM, lParam As LPARAM) As DWord
' TODO: この位置にウィンドウメッセージを処理するためのコードを記述します。

' イベントプロシージャの呼び出しを行います。
MainWndProc=EventCall_MainWnd(hWnd,dwMsg,wParam,lParam)
End Function


'-----------------------------------------------------------------------------
' ここから下は、イベントプロシージャを記述するための領域になります。

Sub MainWnd_Destroy()
hg.delete()
hiraiGDI_DestroyObjects()
PostQuitMessage(0)
End Sub

Sub MainWnd_Create(ByRef CreateStruct As CREATESTRUCT)
Dim p[100] As POINTAPI
Dim x As Long
hg.init(hMainWnd)

For x=0 To 100
p[x].x = x*4
p[x].y = 200-Sin(ToRad(x*4))*100
Next
hg.polyline(VarPtr(p),101)
End Sub

Sub MainWnd_Paint(hDC As HDC)
hg.show()
End Sub


HIRAIGDIクラスがGDIを扱うクラスで、
initでGDIを使う用意をする。
deleteで開放。
showで描写。
あとは各人がカスタマイズしていけば良いと思う。
GDI処理は基本が一緒なので、こういったクラスを作っておくと使い回しができて便利。