如何检测主线程的窗口破坏?

Mar*_*tin 0 windows winapi

通常,"主"窗口类的窗口过程将调用PostQuitMessage以响应WM_DESTROY消息.

我希望主线程根据它创建的窗口的生命周期决定何时终止.这样,无论我选择哪个窗口类作为主窗口,都可以有一个没有PostQuitMessage的通用窗口过程.

while(GetMessage(&msg, NULL, 0, 0))
{
    TranslateMessage(&msg);
    DispatchMessage(&msg);

    if(msg.hwnd == hWnd && msg.message == WM_DESTROY)
    {
        PostQuitMessage(0);
    }
}
Run Code Online (Sandbox Code Playgroud)

以上是我的尝试,但WM_DESTROY消息从未发布到消息队列,它似乎是窗口过程的内部.

有没有办法实现这个目标?

Dav*_*nan 5

WM_DESTROY正在发送而不是发布,这就是它永远不会落入消息队列的原因.如果它最终进入WndProc,并且它没有通过消息泵,那么还有什么其他解释?

窗口句柄通过调用来销毁,而调用DestroyWindow又将WM_DESTROY消息直接发送到WndProc.

我认为你需要为你的潜在主窗口找到一些其他的方法来决定哪一个是在它被摧毁时拉下来的那个.