Граница индикатора выполнения не перерисовывается (Visual C ++)

C ++ в Visual Studio 2008 в Windows XP SP3

У меня есть 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);
}
}
}

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]