我正在尝试销毁我当前正在使用的 HWND,并打开一个新窗口...
这是我的代码:
PostMessage(MainHwnd, WM_DESTROY, NULL, NULL); // Destroy the window
getClient() -> StartClient(); // Opening the client
我在 StartClient 中的位置:
RegisterMainClass(MainInstance); // Registaring the class
//Creating the Window
MainHwnd = CreateWindowEx(WS_EX_CLIENTEDGE ,"MainClient", "Client", WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX, CW_USEDEFAULT, CW_USEDEFAULT, 600, 500, NULL, NULL, MainInstance, NULL);
ShowWindow(MainHwnd, SW_SHOW);
UpdateWindow(MainHwnd);
所以窗口被销毁了,客户端窗口出现了..但是客户端窗口只出现了大约一秒钟,然后又消失了!这是为什么?我已经检查了几次,它实际上很好地创建了客户端窗口,但它以某种方式隐藏了它...
此外,我已经检查了客户端窗口的 WndProc,它确实到达了 return DefWindowProc(hwnd, msg, wParam, lParam);
那么这是怎么回事呢?为什么窗口马上就消失了?
我的 RoomProc 中也有这两个部分:
case WM_CLOSE:
PostQuitMessage(1);
break;
case WM_DESTROY:
DestroyWindow(hwnd);
最佳答案
不要手动发布 WM_DESTROY
。使用 DestroyWindow()
代替:
//PostMessage(MainHwnd, WM_DESTROY, NULL, NULL);
DestroyWindow(MainHwnd); // Destroy the window
由于您正在处理消息队列,您的 WM_DESTROY
消息会延迟,直到稍后处理新消息,但此时您的 MainHwnd
变量值已更改指向新窗口。此外,发送 WM_DESTROY
并不会真正销毁窗口,它只是通知窗口它正在被销毁。
关于c - 窗口正在显示,然后在一秒钟后消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22671368/