Winapi 为什么消息总是返回TRUE?

Winapi 为什么消息总是返回TRUE?,winapi,peekmessage,Winapi,Peekmessage,“render”函数尚未执行有关返回值的文档说明如下: 如果消息可用,则返回值为非零 如果没有可用的消息,则返回值为零 当消息队列为空时,它确实将返回零,即FALSE。因此,结论是消息队列永远不会为空。最有可能的解释是,您在DispatchMessage中处理的其中一条消息导致同一条消息被发布到队列。peek消息仅当消息队列中存在WM_QUIT时才会返回FALSE。只有这个,没有别的。您必须将Render函数移到其他地方,这取决于它应该做什么。@不,当队列为空时,它返回FALSE。很难猜测您一直

“render”函数尚未执行

有关返回值的文档说明如下:

如果消息可用,则返回值为非零

如果没有可用的消息,则返回值为零


当消息队列为空时,它确实将返回零,即
FALSE
。因此,结论是消息队列永远不会为空。最有可能的解释是,您在
DispatchMessage
中处理的其中一条消息导致同一条消息被发布到队列。

peek消息
仅当消息队列中存在WM_QUIT时才会返回FALSE。只有这个,没有别的。您必须将
Render
函数移到其他地方,这取决于它应该做什么。@不,当队列为空时,它返回
FALSE
。很难猜测您一直从问题中收到什么消息。我会在WM_PAINT上下赌注,当你不调用Begin/EndPaint()时,它会一次又一次地生成。哎哟,那不是
GetMessage
。慢大脑,快手指…调试提示:记录信息。查看哪些消息不断传入并阻止渲染运行。然后看看为什么这些信息一直在生成。这在游戏循环中是相当标准的。哦,我太粗心了。WndProc有一个空的案例。案例WM_PAINT:break;所以在消息队列中总是有一个WM_画图
        // Main message loop

        MSG msg;
        ZeroMemory( &msg, sizeof( msg ) );
        while(msg.message!=WM_QUIT)
        {

            if(PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE ) )
            {
                TranslateMessage( &msg );
                DispatchMessage( &msg );
            }
            else
            {
                Render();
            }
        }