main.cpp

WindowsとDirectXの初期化 [詳細]

#include "main.h"
#include "SceneTitle.h"
#include "DrawMain.h"

main.cppのインクルード依存関係図

ソースコードを見る。

関数

LRESULT CALLBACK WndProc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
 メッセージプロシージャ
int WINAPI WinMain (HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR pCmdLine, int nCmdShow)
 この関数から始まる

変数

HWND hWindow = NULL
 ウインドウハンドル
HINSTANCE hInstance = NULL
 インスタンス
RECT rcClientRect
 クライアント領域サイズ
LPSCENE pNowLoop
 メインループ用のシーン関数ポインタ
LPSCENE pNowRelease
 開放用のシーン関数ポインタ


説明

WindowsとDirectXの初期化

main.cpp で定義されています。


関数

int WINAPI WinMain ( HINSTANCE  hInst,
HINSTANCE  hPrevInst,
LPSTR  pCmdLine,
int  nCmdShow 
)

この関数から始まる

アプリケーションのエントリー関数

引数:
[in] hInst このアプリのインスタンス
[in] hPrevInst 前のアプリのインスタンス(使われていない)
[in] pCmdLine コマンドライン引数文字列配列
[in] nCmdShow コマンドライン配列の数
戻り値:
0 エラー終了
そのほか 正常終了
ウインドウの登録、作成、DirectX初期化、メッセージループ、DirectX開放の順

main.cpp39 行で定義されています。

参照先 hInstance, hWindow, pNowLoop, pNowRelease, rcClientRect, TitleInit(), WINDOW_HEIGHT, WINDOW_WIDTH, と WndProc().

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 }

LRESULT CALLBACK WndProc ( HWND  hWnd,
UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam 
)

メッセージプロシージャ

メッセージプロシージャ

引数:
[in] hWnd ウインドウハンドル
[in] uMsg ウインドウメッセージ
[in] wParam ウインドウメッセージパラメータ1
[in] lParam ウインドウメッセージパラメータ2
戻り値:
1 通常終了
0 何らかの処理がされた

main.cpp143 行で定義されています。

参照先 MyWndProc().

参照元 WinMain().

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 }


変数

HINSTANCE hInstance = NULL

インスタンス

main.cpp12 行で定義されています。

参照元 WinMain().

HWND hWindow = NULL

ウインドウハンドル

main.cpp11 行で定義されています。

参照元 DrawFrame(), FrameInit(), FrameRelease(), TitleInit(), TitleMain(), TitleRelease(), と WinMain().

LPSCENE pNowLoop

メインループ用のシーン関数ポインタ

main.cpp18 行で定義されています。

参照元 WinMain().

LPSCENE pNowRelease

開放用のシーン関数ポインタ

main.cpp19 行で定義されています。

参照元 FrameInit(), TitleInit(), と WinMain().

RECT rcClientRect

クライアント領域サイズ

main.cpp13 行で定義されています。

参照元 WinMain().


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