ファイル名:draw.dlg

draw DIALOG 6, 13, 160, 90
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "draw line"
FONT 12, "System"
BEGIN
END

ファイル名:draw.rc

#include 
#include "draw.dlg"

ファイル名:draw.c

#define STRICT
#include 
#include 
#define XDISP 320
#define YDISP 240

#ifdef __cplusplus
extern "C"
#endif
BOOL FAR PASCAL DlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam){
	PAINTSTRUCT ps;
	static HDC hMemDC;
	static HBITMAP hDDBitmap, hOldBitmap;
	HDC hdc;

	switch(msg){
	case WM_TIMER:
		LineTo(hMemDC, rand()%XDISP, rand()%YDISP);
		InvalidateRect(hDlg, NULL, TRUE);
		break;
	case WM_COMMAND:
		switch((WORD)wParam) {
		case IDCANCEL:		/* システムメニューの「クローズ」 */
			SelectObject(hMemDC, hOldBitmap);
			DeleteDC(hMemDC);
			DeleteObject(hDDBitmap);
			KillTimer(hDlg, 1);
			EndDialog( hDlg, wParam );
			break;
		}
		break;
	case WM_PAINT:
		hdc = BeginPaint(hDlg, &ps);
		BitBlt(hdc, 0, 0, XDISP, YDISP, hMemDC, 0, 0, SRCCOPY);
		EndPaint(hDlg, &ps);
		break;
	case WM_INITDIALOG:
		SetTimer(hDlg, 1, 1000, NULL);
		hdc=GetDC(hDlg);
		hMemDC = CreateCompatibleDC(hdc); /* メモリDCを作成 */
		hDDBitmap = CreateCompatibleBitmap(hdc,	XDISP, YDISP); /* DDBを作成 */
		hOldBitmap = (HBITMAP)SelectObject(hMemDC, hDDBitmap);/*メモリDCにDDBを選択させる*/
		ReleaseDC(hDlg, hdc);
		BitBlt(hMemDC, 0, 0, XDISP, YDISP, NULL, 0, 0, WHITENESS);
		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)DlgProc, hinst);
	DialogBox(hinst, "draw", NULL, lpProc);
	FreeProcInstance((FARPROC)lpProc);
	return 0;
}

ファイル名:draw.def

NAME	DRAW
DESCRIPTION  'DRAWLINE'
EXETYPE WINDOWS
STUB	    'WINSTUB.EXE'
CODE    PRELOAD MOVEABLE
DATA    MOVEABLE PRELOAD MULTIPLE
HEAPSIZE  4096
STACKSIZE 8192
EXPORTS
	DLGPROC  @1
戻る