我正在使用代码创建我的应用程序窗口,并且一旦窗口存在,我就会尝试显示一个消息框。但我不能。我只看到新创建的窗口,没有msg框。如果我通过关闭其窗口退出应用程序,msg框突然出现,好像它在某个队列中等待,只有在应用程序窗口关闭时才会显示。我创建窗口的方式是否会以某种方式阻止模态消息框?注意:MessageBox行仅用于测试。我会把它拿出来正常使用,因为它显然会干扰GetMessage循环。
//start relevant section of WinMain:
WNDCLASS wc={0};
wc.lpfnWndProc = WindowProc;
...
if (!RegisterClass(&wc) || !CreateWindow("mc", "mc", WS_POPUPWINDOW|WS_CAPTION|WS_VISIBLE, 100, 50, 100, 100, NULL, NULL, hInstance, NULL)) {
Error("Can't create window");
return 0;
}
ShowWindow(win, SW_SHOWNORMAL);
MessageBox(0, "Test", 0 ,0);
while (GetMessage(&msg,NULL,0,0)>0) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
//end relevant section of WinMain
long FAR PASCAL WindowProc(HWND h, UINT m, WPARAM wParam, LPARAM l)
{
switch (m) {
//process other messages
case WM_CREATE:
win=h;
//init stuff, paint something in the main window
break;
}
return DefWindowProc(h, m, wParam, l);
}
答案 0 :(得分:0)
听起来你并没有像你应该的那样立即从WM_CREATE
返回,但是你的窗口的整个生命周期都在CreateWindow
内。因此,在窗口停止之前,MessageBox实际上不会被调用,并且尝试传递wnd
作为消息框的父级是无效参数(窗口不再存在)。
您不应为DefWindowProc
致电WM_CREATE
。你不应该在DispatchMessage
内部有一个消息循环(即WindowProc
)(例外:处理作为主窗口子节点的模态对话框的消息循环)。
如果可能的话,可以避免重复使用窗口程序。