// // リージョンとウインドウの形 // //   1998/ 5/25 宍戸 輝光 // #include HINSTANCE hInst; HWND hwnd; LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM); int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow){ MSG msg; WNDCLASSEX wndclass ; hInst=hInstance; wndclass.cbSize = sizeof(wndclass); wndclass.style = CS_HREDRAW | CS_VREDRAW; wndclass.lpfnWndProc = WndProc; wndclass.cbClsExtra = 0; wndclass.cbWndExtra = 0; wndclass.hInstance = hInstance; wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION); wndclass.hCursor = LoadCursor (NULL, IDC_ARROW); wndclass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH); wndclass.lpszMenuName = NULL; wndclass.lpszClassName = "Test Window"; wndclass.hIconSm = LoadIcon (NULL, IDI_APPLICATION); RegisterClassEx (&wndclass); hwnd = CreateWindow ("Test Window", "Test", WS_VISIBLE|WS_POPUP, // ウインドウの表示形式 32,32, 160,160, NULL, NULL, hInstance, NULL); ShowWindow (hwnd,iCmdShow); // ウインドウを表示 UpdateWindow (hwnd); // 再描画 while (GetMessage (&msg,NULL,0,0)) { // メッセージ処理 TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam ; } LRESULT CALLBACK WndProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam) { static HWND hwCtrB1,hwCtrB2; static HRGN hRg; switch (iMsg) { case WM_CREATE: // 初期設定 hwCtrB1=CreateWindow("Button","円", // ボタン作成 WS_CHILD | WS_VISIBLE,44,32,72,32,hwnd, (HMENU)0,hInst,NULL); hwCtrB2=CreateWindow("Button","終了", WS_CHILD | WS_VISIBLE,44,96,72,32,hwnd, (HMENU)1,hInst,NULL); hRg=CreateEllipticRgn(0,0,160,160); // 領域作成 return 0; case WM_COMMAND: switch (LOWORD(wParam)) { // ボタンの処理 case 0: // 円ボタン SetWindowRgn(hwnd,hRg,TRUE); // リージョン設定 EnableWindow(hwCtrB1,FALSE); // ボタンを無効化 break; case 1: // 終了ボタン SendMessage(hwnd,WM_CLOSE,0,0); // 終了 } return 0; case WM_DESTROY : PostQuitMessage(0); return 0; } return DefWindowProc (hwnd, iMsg, wParam, lParam) ; }