我在代码中创建了我的应用程序窗口,并且我试图在窗口存在时立即显示一个消息框。但我不能。我只看到新创建的窗口,没有味精盒。如果我通过关闭窗口来退出应用程序,msg框突然出现,就好像它正在某个队列中等待,只有在应用程序窗口关闭时才会显示。我以某种方式创建窗口的方式阻止模态信息框吗?注意:MessageBox行仅用于测试。我会把它拿出来用于正常使用,因为它显然会干扰GetMessage循环。Win32/C无法在CreateWindow之后显示msg框
//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);
}
保存'CreateWindow'的返回值比使用全局变量要好。 – 2010-11-11 22:56:19
我将“!CreateWindow ...”部分更改为“!(win = CreateWindow ...)”,并从WM_CREATE中删除了“win = h”。行为没有变化:仍然没有味精盒。 – MrSparkly 2010-11-12 01:28:04
您没有发布完整的WindowProc,或者其他代码片段丢失。 MessageBox包含一个几乎相同的GetMessage循环,所以它应该没有关系。 – 2010-11-12 15:17:34