我试图摧毁我正在使用的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);
答案 0 :(得分:2)
不要手动发布WM_DESTROY
。请改用DestroyWindow()
:
//PostMessage(MainHwnd, WM_DESTROY, NULL, NULL);
DestroyWindow(MainHwnd); // Destroy the window
由于您正在浏览邮件队列,因此WM_DESTROY
邮件会延迟,直到稍后处理新邮件为止,但到那时您的MainHwnd
变量已更改为指向新窗口的值。此外,发布WM_DESTROY
实际上并没有破坏窗口,它只是通知窗口它正在被销毁。
答案 1 :(得分:0)
我在线程中使用了两行(破坏窗口并创建了一个新窗口),因此,它对我有问题。一旦我正常调用函数而不是在另一个函数中,一切都顺利进行......