PostQuitMessage()不会关闭我的应用程序?

1 c winapi

我试图在win32中编写hello world但是当我关闭主窗口时,应用程序继续运行

我的窗口程序:

LRESULT CALLBACK MainWndProc(HWND hWnd, UINT msg, WPARAM wparam, LPARAM lparam)
{
    switch (msg)
    {
    case WM_DESTROY:
        PostQuitMessage(0);
        return 0;
    }
    return DefWindowProc(hWnd, msg, wparam, lparam);
}
Run Code Online (Sandbox Code Playgroud)

事件循环:

while ((bret = GetMessage(&msg, hWndMain, 0, 0) != 0)
{
    if (bret == -1)
    {
        DWORD error = GetLastError();
        return 1;
    }
    TranslateMessage(&msg);
    DispatchMessage(&msg);
}
Run Code Online (Sandbox Code Playgroud)

现在,通过单击右上角x得到WM_DESTROY,而不是GetMessage()返回0表示获取WM_QUIT,而是返回-1而GetLastError()发出错误1400,这是"无效窗口句柄" ......我很困惑.

And*_*ers 11

通常你会传递NULL而不是一个窗口句柄GetMessage(),这可以解释为什么你ERROR_INVALID_WINDOW_HANDLE从那以后WM_DESTROY和朋友完成后,窗口将不再存在.发布的WM_QUIT PostQuitMessage()是一个线程消息,因此具有句柄的GetMessage永远不会接收它.

这是一个实现细节,但PostQuitMessage甚至不发布真实消息,它只是一个由线程存储的标志,GetMessage将在需要时自动生成消息,有关更多详细信息,请参阅此博客文章.