// Copyright 2005 Doi Shigeki // list201.cpp シンプルなウィンドウプログラム // #include LRESULT CALLBACK wproc( HWND, UINT, WPARAM, LPARAM ); // ウィンドウプロシージャの宣言 int WINAPI WinMain( HINSTANCE hi, HINSTANCE, LPSTR, int ) // 第1引数以外は使わない { WNDCLASSEX wc; // 新しくつくるウインドクラス用 MSG msg; memset( &wc , 0, sizeof(WNDCLASSEX) ); // 設定しなくてもいいパラメータは // 0で埋める wc.cbSize = sizeof(WNDCLASSEX); // WNDCLASSEXの大きさ wc.lpfnWndProc = wproc; // このクラスの持つウインドプロシージャ wc.hInstance = hi; wc.hCursor = LoadCursor( NULL, IDC_ARROW ); wc.hbrBackground = (HBRUSH)GetStockObject( WHITE_BRUSH ); wc.lpszClassName = "simp_win"; // このウィンドウクラスの名前 if(! RegisterClassEx( & wc )) return 0; // ウィンドクラスの登録 // できないと終了   HWND h=CreateWindow( "simp_win", // ウィンドウクラスの名前 "シンプルなウィンドウ", // キャプションの内容  WS_OVERLAPPEDWINDOW | WS_VISIBLE, // ウィンドウの属性, 初期状態は表示 CW_USEDEFAULT, CW_USEDEFAULT, // 位置、大きさは指定しない CW_USEDEFAULT, CW_USEDEFAULT, // WS_OVERLAPPEDWINDOWのときのみ可 HWND_DESKTOP, // 親はディスクトップ NULL, // メニューハンドルなし hi, // インスタンス  NULL ); // ウィンドウプロシージャへ // 渡すパラメータなし  while( GetMessage( &msg, NULL, 0, 0 ) ){ // メッセージループ DispatchMessage( &msg ); } return 0 ; } LRESULT CALLBACK wproc( HWND hwnd, UINT imsg, WPARAM wp, LPARAM lp ) { switch( imsg ){ case WM_PAINT:{ PAINTSTRUCT ps; char *p = "Simple Window"; BeginPaint( hwnd, &ps ); TextOut( ps.hdc, 10, 10, p, strlen( p )); EndPaint( hwnd, &ps ); break; } case WM_DESTROY: // 必ず必要,DefWindowProcでは処理されない PostQuitMessage( 0 ); // メッセージループを終了させる break; default: // 標準的な処理はDefWindowProc()に渡す return DefWindowProc( hwnd, imsg, wp, lp ); } return 0; // プロシージャが処理を行った場合0を返す }