#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 |
開放用のシーン関数ポインタ |
main.cpp で定義されています。
int WINAPI WinMain | ( | HINSTANCE | hInst, | |
HINSTANCE | hPrevInst, | |||
LPSTR | pCmdLine, | |||
int | nCmdShow | |||
) |
この関数から始まる
アプリケーションのエントリー関数
[in] | hInst | このアプリのインスタンス |
[in] | hPrevInst | 前のアプリのインスタンス(使われていない) |
[in] | pCmdLine | コマンドライン引数文字列配列 |
[in] | nCmdShow | コマンドライン配列の数 |
0 | エラー終了 | |
そのほか | 正常終了 |
参照先 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 | 何らかの処理がされた |
参照先 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 }
HWND hWindow = NULL |
ウインドウハンドル
参照元 DrawFrame(), FrameInit(), FrameRelease(), TitleInit(), TitleMain(), TitleRelease(), と WinMain().
RECT rcClientRect |