「GDIでお絵かき」の編集履歴(バックアップ)一覧はこちら
「GDIでお絵かき」(2010/01/29 (金) 09:12:10) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
プロジェクトエディターにてウインドウを作成。
-プロジェクト名 = hiraiGDI
#asciiart(blockquote){
'-----------------------------------------------------------------------------
' イベント プロシージャ
'-----------------------------------------------------------------------------
' このファイルには、ウィンドウ [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処理は基本が一緒なので、こういったクラスを作っておくと使い回しができて便利。