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