main.cpp

説明を見る。
00001 //! @file       main.cpp
00002 //! @brief      WindowsとDirectXの初期化
00003 
00004 #include "main.h"
00005 #include "SceneTitle.h"                 //! タイトルのシーン
00006 #include "DrawMain.h"                   //! ゲームのシーン
00007 
00008 //============================================================================
00009 //Windows用外部公開変数
00010 //============================================================================
00011 HWND                                    hWindow         = NULL; //!< ウインドウハンドル
00012 HINSTANCE                               hInstance       = NULL; //!< インスタンス
00013 RECT                                    rcClientRect;           //!< クライアント領域サイズ
00014 
00015 //============================================================================
00016 //シーン用外部公開変数
00017 //============================================================================
00018 LPSCENE                                 pNowLoop;                       //!< メインループ用のシーン関数ポインタ
00019 LPSCENE                                 pNowRelease;                    //!< 開放用のシーン関数ポインタ
00020 
00021 
00022 //============================================================================
00023 // 関数プロトタイプ宣言
00024 //============================================================================
00025 LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);           //!< メッセージプロシージャ
00026 
00027 //============================================================================
00028 //! アプリケーションのエントリー関数
00029 //! @param[in]          hInst                   このアプリのインスタンス
00030 //! @param[in]          hPrevInst               前のアプリのインスタンス(使われていない)
00031 //! @param[in]          pCmdLine                コマンドライン引数文字列配列
00032 //! @param[in]          nCmdShow                コマンドライン配列の数
00033 //! @retval                     0                               エラー終了
00034 //! @retval                     そのほか            正常終了
00035 //! @brief                      この関数から始まる
00036 //!
00037 //!                             ウインドウの登録、作成、DirectX初期化、メッセージループ、DirectX開放の順
00038 //============================================================================
00039 int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR pCmdLine, int nCmdShow)
00040 {
00041         HWND hWnd = NULL;               //一時的なウインドウハンドル
00042         MSG msg;                                //メッセージ受け取り用
00043 
00044         //メモリーリーク監視
00045         MEMLEAKCHECK();
00046 
00047         // ウインドウの初期化
00048         static char szAppName[] = "実験用サンプル";
00049         WNDCLASSEX wc;
00050         wc.cbSize                       = sizeof(wc);                                                   //構造体のサイズ
00051         wc.style                        = CS_HREDRAW | CS_VREDRAW;                              //スタイル
00052         wc.lpfnWndProc          = WndProc;                                                              //メッセージプロシージャのアドレス
00053         wc.cbClsExtra           = 0;                                                                    //拡張メモリ
00054         wc.cbWndExtra           = 0;                                                                    //拡張ウインドウメモリ
00055         wc.hInstance            = hInst;                                                                //インスタンス
00056         wc.hIcon                        = LoadIcon(NULL, IDI_APPLICATION);              //タイトルバーのアイコン
00057         wc.hCursor                      = LoadCursor(NULL, IDC_ARROW);                  //カーソル
00058         wc.hbrBackground        = (HBRUSH)GetStockObject(BLACK_BRUSH);  //背景色
00059         wc.lpszMenuName         = NULL;                                                                 //メニューのリソース
00060         wc.lpszClassName        = szAppName;                                                    //アプリケーション名
00061         wc.hIconSm                      = LoadIcon(NULL, IDI_ASTERISK);                 //拡張カーソル
00062 
00063         //ウインドウ登録
00064         if(!RegisterClassEx(&wc))
00065                 return 0;
00066 
00067         //ウインドウサイズの調整(普通に作成するとタイトルバーなどでクライアント領域が少なくなる)
00068         rcClientRect.right      = WINDOW_WIDTH;
00069         rcClientRect.bottom = WINDOW_HEIGHT;
00070         AdjustWindowRect(&rcClientRect,                 //調整したいウインドウのサイズ
00071                                         WS_OVERLAPPEDWINDOW,    //ウインドウのスタイル
00072                                         FALSE                                   //メニューの有無
00073                                         );
00074 
00075         //ウインドウ作成
00076         hWnd = CreateWindow(szAppName,                                                          //アプリケーション名(wc.lpszClassNameと一緒じゃないと駄目)
00077                                                 szAppName,                                                              //タイトルバーの文字
00078                                                 WS_OVERLAPPEDWINDOW,                                    //ウインドウのスタイル
00079                                                 CW_USEDEFAULT, CW_USEDEFAULT,                   //ウインドウのX,Y
00080                                                 rcClientRect.right - rcClientRect.left, //ウインドウの幅
00081                                                 rcClientRect.bottom - rcClientRect.top, //ウインドウの高さ
00082                                                 NULL, NULL, hInst, NULL);
00083         if(hWnd == NULL)
00084                 return 0;
00085 
00086         ShowWindow(hWnd, SW_SHOW);                                                                      //ウインドウの表示
00087         UpdateWindow(hWnd);                                                                                     //ウインドウの更新
00088 
00089         hWindow = hWnd;                                                                                         //グローバル変数に格納
00090         hInstance = hInst;                                                                                      //グローバル変数に格納
00091 
00092 
00093         //=================================
00094         //最初に行うシーンのを入れる
00095         pNowLoop = TitleInit;
00096         //=================================
00097 
00098         // メッセージループ
00099         ZeroMemory(&msg, sizeof(msg));
00100         while(msg.message != WM_QUIT)
00101         {
00102                 //メッセージがあるか調べる
00103                 if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
00104                 {
00105                         TranslateMessage(&msg);                                 //メッセージの変換
00106                         DispatchMessage(&msg);                                  //メッセージの割り当て
00107                 }
00108                 else
00109                 {
00110                         //=================================
00111                         //シーンの処理
00112                         pNowLoop = (LPSCENE)pNowLoop();
00113                         if(pNowLoop == NULL)
00114                                 break;
00115                         //=================================
00116 
00117                         //CPUを占有しないようにOSへ優先度を渡す
00118                         Sleep(1);
00119                 }
00120         }
00121 
00122         //=================================
00123         //シーンの開放
00124         pNowRelease();
00125         //=================================
00126 
00127         return (int)msg.wParam;
00128 }
00129 
00130 
00131 
00132 //============================================================================
00133 //! メッセージプロシージャ
00134 //! @param[in]          hWnd            ウインドウハンドル
00135 //! @param[in]          uMsg            ウインドウメッセージ
00136 //! @param[in]          wParam          ウインドウメッセージパラメータ1
00137 //! @param[in]          lParam          ウインドウメッセージパラメータ2
00138 //! @retval                     1                       通常終了
00139 //! @retval                     0                       何らかの処理がされた
00140 //! @brief                      WindowProc()から呼ばれる
00141 //!                                     WindowProc()処理以外でアプリケーション特有の処理をさせたい時に処理を追加して使う
00142 //============================================================================
00143 LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
00144 {
00145         //アプリ固有プロシージャで処理があったか
00146         if(!MyWndProc(hWnd,uMsg,wParam,lParam))
00147                 return 0;
00148         
00149         switch(uMsg)
00150         {
00151                 //ウインドウが消えるとき
00152                 case WM_DESTROY:
00153                         PostQuitMessage(0);
00154                         return 0;
00155                 //キーが押されたとき
00156                 case WM_KEYDOWN:
00157                         if(wParam == VK_ESCAPE)
00158                                 PostMessage(hWnd,WM_CLOSE,0,0);
00159                         return 0;
00160         }
00161 
00162         //何も処理されなければデフォルトの処理を行う
00163         return DefWindowProc(hWnd, uMsg, wParam, lParam);
00164 }
00165 

SceneTestに対してSat Nov 24 22:14:41 2007に生成されました。  doxygen 1.5.2