Область обновления дочернего окна
Дочернее окно — это окно со стилем WS_CHILD или WS_CHILDWINDOW. Как и другие стили окон, дочерние окна получают WM_PAINT сообщения с запросом на обновление. Каждое дочернее окно имеет область обновления, которую система или приложение может настроить для создания сообщений WM_PAINT .
Обновление дочернего окна и видимые области зависят от родительского окна дочернего окна; Это не относится к окнам других стилей. Система часто задает область обновления дочернего окна, когда она задает область обновления родительского окна, в результате чего дочернее окно получает WM_PAINT сообщения, когда родительское окно получает их. Система ограничивает расположение видимой области дочернего окна областью клиента родительского окна и обрезает любую часть дочернего окна, перемещенную за пределы родительского окна.
Система задает область обновления для дочернего окна, если часть области обновления родительского окна включает часть дочернего окна. В таких случаях система сначала отправляет WM_PAINT сообщение в родительское окно, а затем отправляет сообщение дочернему окну, позволяя дочернему окну восстановить все части окна, которые могли быть нарисованы родительским элементом.
Система не задает область обновления родительского элемента, когда задана дочерняя область. Приложение не может создать сообщение WM_PAINT для родительского окна, если сделать его недействительным. Аналогичным образом приложение не может создать сообщение WM_PAINT для дочернего элемента, если сделать недействительным часть клиентской области родительского элемента, которая полностью находится под дочерним окном. В таких случаях ни окно не получает WM_PAINT сообщения.
Приложение может предотвратить настройку области обновления дочернего окна при установке родительского окна, указав стиль WS_CLIPCHILDREN при создании родительского окна. Если этот стиль задан, система исключает дочерние окна из видимой области родительского элемента и, следовательно, игнорирует любую часть области обновления, которая может содержать дочерние окна. Когда приложение рисует в родительском окне, любой рисунок, который будет охватывать дочернее окно, обрезается, что делает последующее сообщение WM_PAINT дочернему окну ненужным.
Обновление и видимые области дочернего окна также зависят от дочерних элементов дочернего окна. Одноуровневые окна — это все окна с общим родительским окном. Если одноуровневые окна перекрываются, установка области обновления для одного из них влияет на область обновления другого, что приводит к отправке WM_PAINT сообщений в оба окна. Если окно в родительской цепочке составно (окно с WX_EX_COMPOSITED), одноуровневые окна получают WM_PAINT сообщения в обратном порядке их положения в порядке Z. Учитывая это, окно с наибольшим значением в порядке Z (вверху) получает WM_PAINT сообщение последним и наоборот. Если окно в родительской цепочке не является составным, одноуровневые окна получают WM_PAINT сообщения в порядке Z.
Одноуровневые окна не обрезаются автоматически. Одноуровневый элемент может рисовать поверх другого перекрывающегося одноуровневого элемента, даже если рисующее окно имеет более низкое положение в порядке Z. Приложение может предотвратить это, указав стиль WS_CLIPSIBLINGS при создании окон. Если задан этот стиль, система исключает все части перекрывающегося одноуровневого окна из видимой области окна, если перекрывающееся одноуровневое окно имеет более высокое положение в порядке Z.
Примечание
Обновления и видимые области для окон, имеющих WS_POPUP или WS_POPUPWINDOW стиле, не затрагиваются родительскими окнами.