Блокировка обновления окна


Блокировка обновления окна (window update lock) - временная приостановка рисования в окне. Система использует блокировку, чтобы воспрепятствовать другим окнам рисовать поверх отслеживаемого прямоугольника всякий раз, когда пользователь перемещает или изменяет размеры окна. Приложения могут использовать блокировку, чтобы предотвратить рисование, если они выполняют операций подобного перемещения или установки размеров со своими собственными окнами.

Приложение использует функцию LockWindowUpdate, чтобы установить или устранить блокировку обновления окна, указывая окно, которое блокируется. Блокировка применяется к заданному окну и ко всем его дочерним окнам. Когда блокировка установлена, функции GetDC и BeginPaint возвращают контекст устройства (DC) отображения с видимым регионом, который пуст. Учитывая это, приложение может продолжить рисовать в окне, но весь вывод данных обрезается. Блокировка сохраняется до тех пор, пока приложение не устранит ее при помощи вызова функции LockWindowUpdate, устанавливая значение NULL для окна. Хотя LockWindowUpdate и заставляет видимый регион окна быть пустым, функция не делает заданное окно невидимым и не сбрасывает бит стиля WS_VISIBLE.

После того, как блокировка установлена, приложение может использовать функцию GetDCEx, со значением DCX_LOCKWINDOWUPDATE, чтобы извлечь контекст устройства (DC) отображения для рисования поверх блокированного окна. Это дает возможность приложению рисовать прямоугольник отслеживания, обрабатывая сообщения клавиатуры или мыши. Система использует этот метод, когда пользователь перемещает и изменяет размеры окна. Функция GetDCEx извлекает контекст устройства (DC) отображения из кэша контекста устройства (DC), таким образом приложение должно освободить контекст устройства как можно быстрее после операции рисования.

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

Назад в оглавление
На главную страницу
Переведено 24.01.2011 15:58 ©Copyright V. Sokovikov
Hosted by uCoz