我是原生c ++的新手。现在,我按下了鼠标左键,它有一个执行InvalidateRect的for循环并绘制一个矩形,并在每次迭代时按照框大小递增X.但是,C ++在绘制方面比C#更快更有效率,它可以立即绘制所有这些内容。我想要的是它使矩形无效,显示矩形,等待50ms,然后继续循环。我试过睡眠(50),但它仍然等到绘画完成后再显示结果。我也尝试过PeekMessage,但它没有改变任何东西。 任何帮助,将不胜感激。感谢
答案 0 :(得分:16)
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);
}
}
}
答案 1 :(得分:2)
我在Win32 API中有点生疏,但执行此操作的异步方式是:
这种方式与事件驱动很好地集成。我意识到这不是你要求的,但我认为无论如何我都会提到它作为一种可能的解决方案:)
编辑:快速谷歌调出Windows API调用[SetTimer](http://msdn.microsoft.com/en-us/library/ms644906(VS.85,loband).aspx),你可以使用它来促进这个。消息将是一个WM_TIMER。