窗口出现,然后消失一秒钟

时间:2014-03-26 19:37:33

标签: c winapi

我试图摧毁我正在使用的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);

2 个答案:

答案 0 :(得分:2)

不要手动发布WM_DESTROY。请改用DestroyWindow()

//PostMessage(MainHwnd, WM_DESTROY, NULL, NULL);
DestroyWindow(MainHwnd); // Destroy the window

由于您正在浏览邮件队列,因此WM_DESTROY邮件会延迟,直到稍后处理新邮件为止,但到那时您的MainHwnd变量已更改为指向新窗口的值。此外,发布WM_DESTROY实际上并没有破坏窗口,它只是通知窗口它正在被销毁。

答案 1 :(得分:0)

我在线程中使用了两行(破坏窗口并创建了一个新窗口),因此,它对我有问题。一旦我正常调用函数而不是在另一个函数中,一切都顺利进行......