winapi - DeferWindowPos и ​​InvalidateRect - PullRequest
       3

winapi - DeferWindowPos и ​​InvalidateRect

0 голосов
/ 24 февраля 2020

У меня есть главное окно, которое позволяет отображать дочерний модальный диалог. Это диалоговое окно создается на основе файла ресурсов с использованием функции DialogBox. Он содержит несколько элементов управления и горизонтальный разделитель, которые перемещаются / меняются при обработке сообщений WM_SIZE и WM_MOUSEMOVE. Я использую функции BeginDeferWindowPos, DeferWindowPos и ​​EndDeferWindowPos. Похоже, что все перекрашено правильно. Должен ли я также вызвать InvalidateRect после EndDeferWindowPos? Есть ли сценарий, где это может быть необходимо? Я не обрабатываю сообщение WM_PAINT.

1 Ответ

3 голосов
/ 24 февраля 2020

Документация для функции DeferWindowPos настоятельно рекомендует, что до тех пор, пока в аргументе uFlags не установлен бит SWP_NOREDRAW, вы не нужно позвонить InvalidateRect после того, как вы позвоните EndDeferWindowPos:

SWP_NOREDRAW 0x0008 Не перерисовывает изменения. Если этот флаг установлен, перекрашивание не происходит. Это относится к клиентской области, неклиентской области (включая строку заголовка и полосы прокрутки) и любой части родительского окна, раскрытой в результате перемещения окна. Когда этот флаг установлен, приложение должно явно аннулировать или перерисовать любые части окна и родительского окна, которые необходимо перерисовать.

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