/* Window Procedure : To treat messages which was sent from OS to msgQue ! */ /* MAKE WINDOW ウィンドウを表示させる */ #include #define MYWNDCLASS "MYWNDCLASS" #define CAPTION "Drowing" #define WIDTH 320 #define HEIGHT 320 /* MAKE GRAPHICS 描画操作の基本形 */ LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { HDC hdc; PAINTSTRUCT ps; HBRUSH hBrush, hBrushPrev; HPEN hPen, hPenPrev; switch(uMsg){ case WM_PAINT: hdc=BeginPaint(hWnd, &ps); /* 描画開始 */ hBrush=CreateSolidBrush(RGB(20, 20, 255)); hBrushPrev=SelectObject(hdc, hBrush); Ellipse(hdc, 10, 10, 100, 100); /* Draw ellipse, oval だ円 */ Rectangle(hdc, 100, 100, 200, 200); /* Draw square 四角形 */ Ellipse(hdc, 200, 200, 250, 250); SelectObject(hdc, hBrushPrev); DeleteObject(hBrush); hBrush=CreateSolidBrush(RGB(0, 255, 0)); hBrushPrev=SelectObject(hdc, hBrush); Ellipse(hdc, 25, 25, 115, 115); Rectangle(hdc, 115, 115, 215, 215); Ellipse(hdc, 215, 215, 265, 265); SelectObject(hdc, hBrushPrev); DeleteObject(hBrush); hPen=CreatePen(1, 2,RGB(255, 0, 0)); hPenPrev=SelectObject(hdc, hPen); Ellipse(hdc, 40, 40, 130, 130); Rectangle(hdc, 130, 130, 230, 230); Ellipse(hdc, 230, 230, 280, 280); SelectObject(hdc, hPenPrev); DeleteObject(hPen); EndPaint(hWnd, &ps); /* 描画終了 */ break; case WM_DESTROY: PostQuitMessage(0); /* To post message to end for OS! */ break; default: return DefWindowProc(hWnd, uMsg, wParam, lParam); } return 0; } int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { MSG msg; WNDCLASSEX wc; HWND hWnd; ZeroMemory(&wc, sizeof(wc)); /* ウィンドウクラス構造体の初期化 */ wc.cbSize = sizeof(WNDCLASSEX); wc.lpfnWndProc = (WNDPROC)WndProc; wc.hInstance = hInstance; wc.hCursor = LoadCursor(NULL, MAKEINTRESOURCE(IDC_ARROW)); wc.hbrBackground = GetStockObject(BLACK_BRUSH); wc.lpszClassName = MYWNDCLASS; RegisterClassEx(&wc); /* To regist "Window Class" to OS ウィンドウクラスを OS に登録 */ hWnd = CreateWindowEx(0, /* Make Window ウィンドウクラス インスタンス生成 */ MYWNDCLASS, CAPTION, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, WIDTH, HEIGHT, NULL, NULL, hInstance, NULL); /* Draw Window */ ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); /* Mesage loup :ウィンドウアプリケーションは無限ループでスレッドを維持。GetMessageの返り値が "0" で終了 */ while (GetMessage(&msg, NULL, 0, 0)){ /* GetMessage 関数でメッセージキューからメッセージを取得 */ TranslateMessage(&msg); DispatchMessage(&msg); /* WndProc(50行目以降)へディスパッチ */ } return msg.wParam; }