WM_CREATE について
Windows API の勉強を始めた者です。
CreateWindow関数を使ったときに発行されるWM_CREATEについて質問させていただきます。
以下のようなプログラムを作りました。このプログラムはウインドウを作るプログラムなのですが、はじめにウインドウを作るかどうかをWindowProcの中で聞いています。
このプログラムでウインドウを作らないという選択肢をとった時が分かりません。
WindowProcでは return -1 をするのでウインドウは作られず、従ってhWndにはNULLが入ります。そして次の文で、
if (hWnd == NULL) {
MessageBox(NULL,TEXT("CreateWindow failed"),NULL,MB_OK);
return 0;
}
メッセージボックスが表示されてからプログラムが終了すると思ったのですが、実際にはメッセージボックスは表示されませんでした。
なぜでしょうか。return -1 をした時点で、ウインドウが作られないのでWM_DESTROYがウインドウプロシージャにSendされるのかと考えたのですが、そうなのでしょうか。
よろしくお願いします。
/* 作ったプログラム */
#include <windows.h>
LRESULT CALLBACK WindowProc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
int YESNO;
switch(uMsg) {
case WM_DESTROY:
PostQuitMessage(0);
return 0;
case WM_CREATE:
YESNO = MessageBox(NULL, TEXT("Create a new window?"),
((LPCREATESTRUCT)lParam)->lpszName, MB_YESNO);
if (YESNO == IDYES)
return 0;
if (YESNO == IDNO)
return -1;
}
return DefWindowProc(hWnd, uMsg, wParam, lParam);
}
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
PSTR lpCmdLine,
int nCmdShow)
{
WNDCLASS wc;
ATOM atom;
MSG msg;
HWND hWnd;
wc.style = CS_HREDRAW| CS_VREDRAW;
wc.lpfnWndProc = WindowProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = NULL;
wc.hCursor = NULL;
wc.hbrBackground = (HBRUSH)COLOR_BACKGROUND + 1;
wc.lpszMenuName = NULL;
wc.lpszClassName = TEXT("sample_window");
if ((atom = RegisterClass(&wc)) == 0) {
MessageBox(NULL,TEXT("RegisterClass failed"),NULL,MB_OK);
return 0;
}
hWnd = CreateWindow((LPCTSTR)atom, TEXT("Sampe window"),
WS_OVERLAPPEDWINDOW | WS_VISIBLE,
100, 100, 400, 300,
NULL, NULL, hInstance, NULL);
if (hWnd == NULL) {
MessageBox(NULL,TEXT("CreateWindow failed"),NULL,MB_OK);
return 0;
}
while (GetMessage(&msg, NULL, 0, 0) > 0) {
DispatchMessage(&msg);
}
return msg.wParam;
}