0

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

0 回答 0