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