ウィンドウの生成と表示 †Windowsアプリケーションの基本。 制約 †.NET関数・MFCを使用しないこと。 #include <tchar.h> #include <windows.h> #include <commdlg.h> #define PROC_NG -1 #define FUNC_NG_NEGATIVE -1 #define FUNC_NG 0 #define END_MSG 0 #define PROCESS_OK 0 #define RET_OK 0 #define RET_NG -1 typedef unsigned char u1b; LRESULT CALLBACK WndProc( HWND hWnd, UINT msg, WPARAM wp, LPARAM lp );// プロトタイプ宣言 u1b wndRootin ( HINSTANCE de_hInst, HWND* de_hWnd ); int WINAPI WinMain( HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR pCmdLine, int showCmd ) { HWND hWnd; // ウィンドウハンドル MSG msg; // メッセージ u1b rtnCod = RET_OK; // リターンコード // for ( ; ; ) // 無限ループ { // rtnCod = wndRootin( hInst, // ウィンドウ作成関数 &hWnd ); // IN: hInst OUT: hWnd if( RET_OK != rtnCod ) // リターン判定 { // OK以外の場合 break; // 処理終了 } // // ShowWindow( hWnd, SW_SHOW ); // ウィンドウを表示する UpdateWindow( hWnd ); // ウィンドウ更新 // for( ; ; ) // メッセージループ { // 終了メッセージがくるまで BOOL ret = GetMessage( &msg, NULL, 0, 0 ); // キューからメッセージを取得する OUT: msg if( FUNC_NG == ret || END_MSG == ret ) // リターンコードの判定 { // 取得エラーまたは終了メッセージ break; // 処理終了 } // else // { // その他 TranslateMessage( &msg ); // メッセージを処理する DispatchMessage( &msg ); // OUT: msg } // } // // break; // ループを抜ける } // // return ( rtnCod ); // リターンコードを返して終了 } LRESULT CALLBACK WndProc( HWND hWnd, UINT msg, WPARAM wp, LPARAM lp )// ウィンドウプロシージャ { // switch( msg ) // メッセージを判定 { // case WM_DESTROY: // ウィンドウ破棄のとき PostQuitMessage( END_MSG ); // 終了メッセージを送る return PROCESS_OK; // 正常終了 } // // return DefWindowProc( hWnd, msg, wp, lp ); // 他のメッセージは、デフォルトの処理を行う // } u1b wndRootin ( HINSTANCE de_hInst, HWND* de_hWnd ) { // WNDCLASSEX wc; // ウィンドウクラス構造体 u1b rtnCod = RET_OK; // リターンコード // for ( ; ; ) // 無限ループ { // wc.cbSize = sizeof( wc ); // ウィンドウクラスの設定 サイズ wc.style = CS_HREDRAW | CS_VREDRAW; // スタイル wc.lpfnWndProc = WndProc; // ウィンドウプロシージャ wc.cbClsExtra = 0; // 拡張情報1 wc.cbWndExtra = 0; // 拡張情報2 wc.hInstance = de_hInst; // インスタンスハンドル wc.hIcon = ( HICON )LoadImage( // アイコン NULL, MAKEINTRESOURCE( IDI_APPLICATION ), IMAGE_ICON, // 0, 0, LR_DEFAULTSIZE | LR_SHARED ); // // wc.hIconSm = wc.hIcon; // 子アイコン wc.hCursor = (HCURSOR)LoadImage( // マウスカーソル NULL, MAKEINTRESOURCE(IDC_ARROW), IMAGE_CURSOR, // 0, 0, LR_DEFAULTSIZE | LR_SHARED ); // // wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); // ウィンドウ背景 wc.lpszMenuName = NULL; // メニュー名 wc.lpszClassName = _T("Menu"); // ウィンドウクラス名 // if( FUNC_NG == RegisterClassEx( &wc ) ) // ウィンドウクラスを登録する { // MessageBox(NULL, "ウィンドウクラスの登録失敗", "StyleMod", MB_OK);// 画面表示 rtnCod = RET_NG; // 手続き失敗処理 break; // 処理終了 } // // *de_hWnd = CreateWindow( // ウィンドウを作成する wc.lpszClassName, // ウィンドウクラス名 _T("StyleMod"), // タイトルバーに表示する文字列 WS_OVERLAPPEDWINDOW, // ウィンドウの種類 CW_USEDEFAULT, // ウィンドウを表示する位置(X座標) CW_USEDEFAULT, // ウィンドウを表示する位置(Y座標) CW_USEDEFAULT, // ウィンドウの幅 CW_USEDEFAULT, // ウィンドウの高さ NULL, // 親ウィンドウのウィンドウハンドル NULL, // メニューハンドル de_hInst, // インスタンスハンドル NULL ); // その他の作成データ // if( NULL == *de_hWnd ) // ウインドウが作成できたか { // 作成に失敗 MessageBox(NULL, "ウィンドウの作成失敗", "StyleMod", MB_OK); // 画面表示 rtnCod = RET_NG; // 手続き失敗処理 break; // 処理終了 } // // break; // ループを抜ける } // // return ( rtnCod ); // リターンコードを返して終了 } 参考ページ †http://www.geocities.jp/ky_webid/win32c/index.html |