Обновить окно в Visual C ++ - PullRequest
0 голосов
/ 13 мая 2009

У меня есть проект Visual C ++, но я не могу обновить окно и перерисовать себя. Я использовал

RedrawWindow();
m_ProgressDlg->RedrawWindow();

, а также

UpdateData(false);
m_ProgressDlg->UpdateData(false);

но, кажется, никогда не идет хорошо.

Как мне это сделать?

Ответы [ 6 ]

4 голосов
/ 13 мая 2009

Вы можете использовать UpdateWindow в сочетании с InvalidateRect , чтобы получить немедленную перерисовку.

2 голосов
/ 13 мая 2009

Для клиентской области используйте InvalidateRect + UpdateWindow. Если вы хотите перерисовать не-клиентскую область окна, попробуйте вызвать SetWindowPos с помощью SWP_DRAWFRAME | SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE.

1 голос
/ 13 мая 2009

Похоже, вы используете MFC.

Я считаю, что ваше приложение занято и не обрабатывает сообщения из очереди, поэтому оно не обрабатывает WM_PAINT, который обновит окно.

Используйте параметр RDW_UPDATENOW с RedrawWindow, чтобы принудительно перекрасить, даже если ваше окно занято.

1 голос
/ 13 мая 2009

:: InvalidateRect (hwnd, NULL, TRUE) Функция WinAPI (или метод wnd-> InvalidateRect (NULL)) должна сделать свое дело: она делает недействительной клиентскую область и заставляет систему отправлять WM_PAINT в окно, чтобы перерисовать ее. Если вы хотите немедленную перерисовку, вы также должны вызвать UpdateWindow () сразу после аннулирования.

0 голосов
/ 03 мая 2018

Возможно, вы также пытаетесь вызвать Invalidate () и RedrawWindow (), когда m_hWnd равен NULL, если «не очень хорошо» означает сбой. Попробуйте:

if (m_hWnd)
{
   Invalidate();
   RedrawWindow();
}

(Я знаю, что это старый, но у некоторых из нас все еще одна нога застряла в грязи MFC.)

0 голосов
/ 13 мая 2009

Но в версии релиза он не работает должным образом, даже если с openeed worspace он кажется

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...