graph DIALOG 6, 13, 199, 127 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "簡易グラフィック" FONT 12, "System" BEGIN ENDそれから、以下のソースを書きます。
#include <windows.h> #include <math.h> #ifdef WIN32 #define MoveTo(hdc, x, y) (MoveToEx((hdc), (x), (y), NULL)) #endif #ifdef __cplusplus extern "C" #endif BOOL FAR PASCAL graph(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam){ PAINTSTRUCT ps; HDC hdc; HPEN hpen, hpenOld; int i; switch(msg){ case WM_COMMAND: switch((WORD)wParam) { case IDCANCEL: /* 「×」ボタンもしくは、システムメニューの「クローズ」 */ EndDialog( hDlg, wParam ); break; } break; case WM_PAINT: hdc = BeginPaint(hDlg, &ps); BitBlt(hdc, 0, 0, 320, 240, NULL, 0, 0, BLACKNESS);/*黒で塗りつぶす*/ MoveTo(hdc, 0, 0); LineTo(hdc, 320, 240); /*↑黒の上に黒で線を引いても見えない*/ hpen=GetStockObject(WHITE_PEN); hpenOld=SelectObject(hdc, hpen); MoveTo(hdc, 0, 120); LineTo(hdc, 320, 120); MoveTo(hdc, 160, 0); LineTo(hdc, 160, 240); SelectObject(hdc, hpenOld); DeleteObject(hpen); for (i=0; i<320; ++i) SetPixel(hdc, i, sin(i*3.14/160)*20+120, RGB(255, 255, 255)); EndPaint(hDlg, &ps); break; case WM_INITDIALOG: return TRUE;/* SetFocusしたらfalse */ default: return FALSE; } return TRUE; } int PASCAL WinMain(HINSTANCE hinst, HINSTANCE hprev, LPSTR cmdline, int cmdshow){ DLGPROC lpProc = (DLGPROC)MakeProcInstance((FARPROC)graph, hinst); DialogBox(hinst, "graph", NULL, lpProc); FreeProcInstance((FARPROC)lpProc); return 0; }graph.rcファイル
#include "graph.dlg"DEFファイルは省略しますが、16ビットの方はEXPORT宣言を忘れないでください。
実行結果
WM_PAINTメッセージに応答して、画面に表示するにはBeginPaint()APIでDCを取得し、 描画し終わったらEndPaint()でそれを解放します。実際にBeginPaint()の戻り値として得られるのは DCのハンドル(HDC)です。よく使う描画関数には、以下のような物があります。
一つ上のページに戻る