进度条边框未重绘(Visual C ++)

时间:2013-08-15 10:37:33

标签: c++ visual-studio-2008 progress-bar border paint

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);
        }
    }
}

0 个答案:

没有答案