WinMain関数 - インコのWindowsSDK を修正して、ウインドウを表示するようにします。
流れ
1.WinMain()の中で、今回新たに作成する作成するInitInstance()を呼び出します。
2.CreateWindow()で、ウインドウを作成します。
HWND CreateWindow(
LPCTSTR lpClassName, // 登録されているクラス名
LPCTSTR lpWindowName, // タイトルバーに表示する文字列
DWORD dwStyle, // ウインドウスタイル
int x, // ウインドウ左上のX座標
int y, // ウインドウ左上のY座標
int nWidth, // ウインドウの幅
int nHeight, // ウインドウの高さ
HWND hWndParent, // オーナー(親)ウィンドウのハンドル
HMENU hMenu, // メニューのハンドルまたは子のID(識別子)
HINSTANCE hInstance, // アプリケーションインスタンスのハンドル
LPVOID lpParam // ウィンドウ作成データ
);
引数の簡単な説明
| 引数 | 意味 | 解説 |
|---|---|---|
| lpClassName | 登録されているクラス名 | TEXT("STATIC")とします。 |
| lpWindowName | タイトルバーに表示する文字列 | 文字セットをunicodeでコンパイルする場合は、テキストを必ず、TEXT("")で囲ってください。 |
| dwStyle | ウインドウスタイル |
通常のウインドウを作成するWS_OVERLAPPEDWINDOWを指定します。 DWORD型は、32ビット符号なし整数型です。 |
| x, y, nWidth, nHeight | ウインドウの位置、サイズ | CW_USEDEFAULTを指定すると自動設定になります。 |
| hWndParent | オーナー(親)ウィンドウのハンドル | オーナーウィンドウがないのでNULL |
| hMenu | メニューのハンドルまたは子のID(識別子) | メニューを付けないのでNULL |
| hInstance | アプリケーションインスタンスのハンドル | |
| lpParam | ウィンドウ作成データ | ここではNULL |
この関数の戻り値は、HWND型です。HWND型とは、ウィンドウハンドルを表すポインタ型変数です。
引数の詳しい説明は、 CreateWindowEx() で解説します。
3.CreateWindow()が成功したら、ShowWindow()でウインドウを表示します。
BOOL ShowWindow(
HWND hWnd, // ウィンドウハンドル
int nCmdShow // 表示状態
);
今回のように、アプリケーションが最初に呼び出す引数ShowWindow()の場合、 nCmdShowは、必ずWinMain()のnCmdShowパラメータを指定してください。
4.UpdateWindow()でウインドウを更新します。
BOOL UpdateWindow(
HWND hWnd, // ウィンドウハンドル
);
ソースコードの入力
ソースコードは下記のように入れてください。
test.cpp
#include <windows.h> // このコード モジュールに含まれる関数の宣言を転送します: BOOL InitInstance(HINSTANCE, int); int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { // アプリケーションの初期化を実行します: if (!InitInstance (hInstance, nCmdShow)) { return FALSE; } return 0; } // // 関数: InitInstance(HINSTANCE, int) // // 目的: メイン ウィンドウを作成します。 // BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) { HWND hWnd; hWnd = CreateWindow(TEXT("STATIC"), TEXT("HP"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL); if (!hWnd) { return FALSE; } ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); return TRUE; }
実行すると分かると思いますが、一瞬だけウインドウが表示された後、すぐにウインドウが閉じてしまいます。
これは、WinMain() が最後の return 0; まで来る事により、アプリケーションが終了するためです。
通常のアプリケーションでは、ユーザーが終了の処理をしない限り、WinMain() の最後まで行かないようにしています。これは、次回以降で説明します。