エントリーポイントから呼び出されるユーザー関数の解析
ウィンドウクラスを登録するRegisterClassExW 関数を処理するためのユーザー関数。
// // 関数: MyRegisterClass() // // 目的: ウィンドウ クラスを登録します。 // ATOM MyRegisterClass(HINSTANCE hInstance) { WNDCLASSEXW wcex; wcex.cbSize = sizeof(WNDCLASSEX); wcex.style = CS_HREDRAW | CS_VREDRAW; wcex.lpfnWndProc = WndProc; wcex.cbClsExtra = 0; wcex.cbWndExtra = 0; wcex.hInstance = hInstance; wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_WIN32PROJECT3)); wcex.hCursor = LoadCursor(nullptr, IDC_ARROW); wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); wcex.lpszMenuName = MAKEINTRESOURCEW(IDC_WIN32PROJECT3); wcex.lpszClassName = szWindowClass; wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL)); return RegisterClassExW(&wcex); }
構造体の意味は以下通り。
メンバ変数名 | 型 | 意味 |
---|---|---|
cbSize | UINT | この構造体のバイトサイズ |
style | UNIT | 表示するウインドウのスタイルを指定する。 |
lpfnWndProc | WNDPROC | ウィンドウプロシージャの関数を設定。 |
cbClsExtra | int | |
cbWndExtra | int | |
hInstance | HINSTANCE | wWinMainの引数で受け取ったインスタンスを設定する。 |
hIcon | HICON | アプリケーションのアイコンを設定する |
hCursor | HCURSOR | ウィンドウ上にマウスカーソルが移動された場合に表示するマウスカーソルの種類の設定 |
hbrBackground | HBRUSH | ウィンドウのクライアント領域の背景色を設定。指定した色に+1して設定するようだ。 |
lpszMenuName | LPCTSTR | リソースで指定しているメニューを指定する |
lpszClassName | LPCTSTR | クラス名の文字列の設定 |
hIconSm | HICON | アプリケーションの小さいアイコンの指定 |
次は、ウィンドウを生成して表示を行う。
// // 関数: InitInstance(HINSTANCE, int) // // 目的: インスタンス ハンドルを保存して、メイン ウィンドウを作成します。 // // コメント: // // この関数で、グローバル変数でインスタンス ハンドルを保存し、 // メイン プログラム ウィンドウを作成および表示します。 // BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) { hInst = hInstance; // グローバル変数にインスタンス処理を格納します。 HWND hWnd = CreateWindowW(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, nullptr, nullptr, hInstance, nullptr); if (!hWnd) { return FALSE; } ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); return TRUE; }
CreateWindowWでウィンドウを生成する。 ShowWindowで、ウィンドウを表示する。第二パラメータはwWinMainで 受け取ったnCmdShowを通常はそのまま渡す。 UpdateWindowで、再描画を要求して表示を正しくする。