''[[FrontPage]]''
* ウィンドウの生成と表示 [#g80f30a7]
Windowsアプリケーションの基本。~

** 制約 [#t16660bc]
.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 );                                           // リターンコードを返して終了 
 }
*** 参考ページ [#zdc1ccd2]
http://www.geocities.jp/ky_webid/win32c/index.html~
http://lets-go.hp.infoseek.co.jp/c_setting08.html~

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS