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)です。よく使う描画関数には、以下のような物があります。
一つ上のページに戻る