(LIST1) // 最もシンプルなWindowsアプリケーション #include //. メイン関数(プログラムはここから始まる) int PASCAL WinMain (HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpszCmdLine, int nCmdShow) { WNDCLASS wndclass ; // ウィンドウクラスの変数 //. ウィンドウクラスの定義 wndclass.style = CS_HREDRAW | CS_VREDRAW ; //. ウィンドウプロシージャの名前 wndclass.lpfnWndProc = WndProc ; wndclass.cbClsExtra = 0 ; wndclass.cbWndExtra = 0 ; wndclass.hInst = hInst ; wndclass.hIcon = LoadIcon (hInst, APPNAME) ; wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ; wndclass.hbrBackground = GetStockObject (WHITE_BRUSH) ; wndclass.lpszMenuName = APPNAME ; //. ウィンドウクラス名 wndclass.lpszClassName = APPNAME ; // ウィンドウクラスを登録する RegisterClass (&wndclass); //. クラス名やウィンドウのスタイルを指定してウィンドウを作成する //. hWnd はウィンドウを識別するハンドルを入れる変数 HWND hWnd = CreateWindow ( APPNAME, APPNAME, //. クラスとウィンドウの名前 WS_OVERLAPPEDWINDOW, //. ウィンドウスタイル CW_USEDEFAULT, CW_USEDEFAULT, // ウィンドウの位置と CW_USEDEFAULT, CW_USEDEFAULT, //.ウィンドウのサイズ NULL, NULL, hInst, NULL) ; // 親ウィンドウのハンドルなど //. ウィンドウを表示する ShowWindow (hWnd, nCmdShow) ; //. ウィンドウの最初の描画(WM_PAINTを送る) UpdateWindow (hWnd) ; MSG msg ; // メッセージを入れる変数 //. ウィンドウのメッセージループ while (GetMessage (&msg, NULL, 0, 0)) //. メッセージを取り出す { TranslateMessage (&msg) ; //. 仮想キーメッセージを変換する DispatchMessage (&msg) ; //. メッセージを適切なところに配る } return msg.wParam ; } //. ウィンドウプロシージャ(メッセージを処理する仕掛け) //. 名前は必ずしもWndProcでなくても良い LRESULT FAR PASCAL WndProc (HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam) { switch (iMessage) { case WM_COMMAND: // メニューコマンド switch (wParam) { case IDM_SOMETHING: //. メニュー項目 (選択されたメニューに対応する処理); break ; case IDM_QUIT: //. アプリケーション終了 DestroyWindow (hWnd) ; break ; } break ; case WM_SOMETHING: //.メニュー選択以外のイベント (イベント処理) break ; case WM_DESTROY: PostQuitMessage (0) ; break ; default: // デフォルトメッセージ処理 return DefWindowProc (hWnd, iMessage, wParam, lParam) ; } return (0L) ; }