Windows XP SP3 中 Visual Studio 2008 中的 C++
我在一个对话框上有一个 CProgressCtrl,该对话框正在一个需要一段时间才能完成的循环中更新。它开始隐藏,在循环中可见,然后在完成时再次隐藏。
在循环中,我调用了一个doEvents()
处理消息队列的方法。这是为了确保在我移动它时重新绘制表单,并且当我更新栏时进度条框会增加SetPos()
我第一次使用进度条时效果很好。但是,在随后的使用中,该条出现时没有边框,并且当框增加时,边框不会被重绘(这些仍然正确绘制)。
如何强制(重新)绘制进度条的边框?我已经尝试过Invalidate()
,但它们都没有任何区别UpdateWindow()
。RedrawWindow()
有趣的是,当循环运行时,如果我将对话框拖出屏幕并再次返回,边框会立即重绘。
如果它是相关的,这是doEvents()
我正在使用的方法(取自这里)
void MyClass::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);
}
}
}