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