c - 窗口正在显示,然后在一秒钟后消失

标签 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);

最佳答案

不要手动发布 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/

相关文章:

c - 用 alloca 分配的内存在函数结束时或在范围结束时被释放?

c - 使用枚举作为常量时 c 编译器的意外行为

c++ - 将结构写入和读取文件

c# - 如何在我的应用程序外部的窗口上设置 'always on top' 标志/设置?

c - Hook 一个我不知道参数的函数

c - 列出数组中不重复的字符

c++ - 从 Select 调用返回后,在服务器处处理/重组 TCP 分段数据包的方法

python - 确定是否继承 ntfs 权限的可靠方法

windows - 如何使用 mt.exe 将 list 添加到可执行文件?

c - c程序内存错误