2009-05-13 1 views
0

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

RedrawWindow(); 
m_ProgressDlg->RedrawWindow(); 

, а также

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

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

Как я могу это сделать?

ответ

1

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

+0

InvalidateRect не работает сразу, это просто приводит к тому, что сообщение WM_PAINT будет создано в конечном итоге. Другие сообщения имеют приоритет, поэтому может потребоваться некоторое время, прежде чем окно перекрашивается. Обычно это то, что вы хотите - приложение не должно становиться невосприимчивым только потому, что оно постоянно перекрашивается. –

+0

Да, вы правы, спасибо за уведомление - «немедленное» осталось от предыдущей версии сообщения. Исправлена. – Rageous

1

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

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

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

0

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

+0

Непонятно, на какой ответ вы отвечаете. Поместите свои ответы в исходный вопрос как «Редактирование». – egrunin

2

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

+0

Абсолютная заставка. На самом деле больше похоже на здравый смысл. Долгое время искали такое решение. Благодарю. – Fractal

+0

'UpdateWindow' не возвращается до тех пор, пока WM_PAINT не будет обработан PROC. – Zen

+0

Картина (рисунок) оконной рамы без вызова OnSize - это то, что искали. Требуется для отладки и проектирования. Он не будет в конечном коде, но хорош для устранения неполадок. – Fractal

Смежные вопросы