/* 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 #define R 0xFF #define G 0xFF00 #define B 0xFF0000 #define PI 3.141593 /* MAKE GRAPHICS 描画操作の基本形 */ LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { HDC hdc; PAINTSTRUCT ps; int x, y; switch(uMsg){ case WM_PAINT: hdc=BeginPaint(hWnd, &ps); /* 描画開始 */ for (y = 0; y < HEIGHT; y += 5) { for (x = 0; x < WIDTH; x++) { SetPixel(hdc, x, y, R | G | B); } } MoveToEx(hdc , 10 , 10 , NULL); LineTo(hdc , 110 , 10); LineTo(hdc , 110 , 110); 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; WNDCLASS winc; /* winc.style = CS_HREDRAW | CS_VREDRAW; winc.lpfnWndProc = WndProc; winc.cbClsExtra = winc.cbWndExtra = 0; winc.hInstance = hInstance; winc.hIcon = LoadIcon(NULL , IDI_APPLICATION); winc.hCursor = LoadCursor(NULL , IDC_ARROW); winc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); winc.lpszMenuName = NULL; winc.lpszClassName = TEXT("GRPH"); */ 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; }