微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我的Win32应用程序不会退出主循环

这是我的主循环:
while(TRUE)
    {

    PeekMessage(&msg,hWnd,PM_REMOVE);
        if (msg.message==WM_QUIT)
            break;
        TranslateMessage(&msg);
        dispatchMessage(&msg);


    }

这是我的回调程序:

LRESULT CALLBACK WinProc(HWND hWnd,UINT msg1,WParaM wParam,LParaM lParam)
 {
    switch(msg1)
    {
        case WM_DESTROY  :
        {
            PostQuitMessage(0);
            return 0;
        }
        break;
    }

    return DefWindowProc(hWnd,msg1,wParam,lParam);
}

我发现当我按下关闭按钮时,下一个循环中的PeekMessage函数将返回WM_NCLBUTTONDOWN,而没有WM_QUIT!

correct way一个消息循环是
BOOL bRet;
MSG msg;
while ((bRet = GetMessage(&msg,0)) != 0)
{ 
    if (bRet == -1)
    {
        // handle the error and possibly exit
    }
    else
    {
        TranslateMessage(&msg); 
        dispatchMessage(&msg); 
    }
}

如果你真的需要,你可以使用PeekMessage ……但为什么你忽略了返回值?

另请注意,这是特定于窗口的.我相信PostQuitMessage是一个线程…我不记得它在我的头顶,但你可能需要传递NULL而不是hWnd.

如果你有任何其他窗口,也可能劫持他们的消息循环 – 我不认为这通常是一个问题,但它可能是一个;记在脑子里.

原文地址:https://www.jb51.cc/windows/364566.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐