「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処理は基本が一緒なので、こういったクラスを作っておくと使い回しができて便利。

表示オプション

横に並べて表示:
変化行の前後のみ表示: