我不熟悉原生c++。现在,当我按下鼠标左键时,它有一个InvalidateRect循环,它执行InvalidateRect并绘制一个矩形,并在每次迭代时按框的大小递增X。但是,C++在绘图方面比C#快得多,效率也高得多,以至于它可以立即绘制所有这些内容。我想要的是使矩形无效,显示矩形,等待50ms,然后继续循环。我尝试了Sleep(50),但它仍然要等到绘画完成后才会显示结果。我也尝试过PeekMessage,但它没有改变任何东西。任何帮助都将不胜感激。谢谢
发布于 2009-09-12 13:20:27
DoEvents基本上翻译为:
void DoEvents()
{
MSG msg;
BOOL result;
while ( ::PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE ) )
{
result = ::GetMessage(&msg, NULL, 0, 0);
if (result == 0) // WM_QUIT
{
::PostQuitMessage(msg.wParam);
break;
}
else if (result == -1)
{
// Handle errors/exit application, etc.
}
else
{
::TranslateMessage(&msg);
:: DispatchMessage(&msg);
}
}
}发布于 2009-09-12 13:27:39
我对Win32应用程序接口有点生疏,但是异步的方式是:
F29
这种方式很好地与事件驱动相结合。我知道这并不完全是您所要求的,但我想我还是把它作为一种可能的解决方案提出来:)
编辑:快速google会打开Windows API调用[ SetTimer](http://msdn.microsoft.com/en-us/library/ms644906(VS.85,loband%29.aspx%29),您可以使用它来简化这一过程。消息将是WM_TIMER消息。
https://stackoverflow.com/questions/1415095
复制相似问题