Región de actualización de ventana secundaria
Una ventana secundaria es una ventana con el estilo WS_CHILD o WS_CHILDWINDOW. Al igual que otros estilos de ventana, las ventanas secundarias reciben mensajes WM_PAINT para solicitar la actualización. Cada ventana secundaria tiene una región de actualización, que el sistema o la aplicación pueden establecer para generar mensajes WM_PAINT eventuales.
La actualización y las regiones visibles de una ventana secundaria se ven afectadas por la ventana primaria del elemento secundario; esto no es cierto para las ventanas de otros estilos. El sistema suele establecer la región de actualización de la ventana secundaria cuando establece la región de actualización de la ventana primaria, lo que hace que la ventana secundaria reciba WM_PAINT mensajes cuando la ventana primaria las recibe. El sistema limita la ubicación de la región visible de la ventana secundaria a dentro del área cliente de la ventana primaria y recorta cualquier parte de la ventana secundaria que se mueva fuera de la ventana primaria.
El sistema establece la región de actualización de una ventana secundaria cada vez que parte de la región de actualización de la ventana primaria incluye una parte de la ventana secundaria. En tales casos, el sistema envía primero un mensaje de WM_PAINT a la ventana primaria y, a continuación, envía un mensaje a la ventana secundaria, lo que permite al elemento secundario restaurar cualquier parte de la ventana en la que el elemento primario pueda haber dibujado.
El sistema no establece la región de actualización del elemento primario cuando se establece el elemento secundario. Una aplicación no puede generar un mensaje de WM_PAINT para la ventana primaria invalidando la ventana secundaria. De forma similar, una aplicación no puede generar un mensaje de WM_PAINT para el elemento secundario invalidando una parte del área cliente del elemento primario que se encuentra completamente bajo la ventana secundaria. En tales casos, ninguna ventana recibe un mensaje WM_PAINT.
Una aplicación puede impedir que la región de actualización de una ventana secundaria se establezca cuando se establece la ventana primaria especificando el estilo de WS_CLIPCHILDREN al crear la ventana primaria. Cuando se establece este estilo, el sistema excluye las ventanas secundarias de la región visible del elemento primario y, por tanto, omite cualquier parte de la región de actualización que pueda contener las ventanas secundarias. Cuando la aplicación pinta en la ventana primaria, cualquier dibujo que cubra la ventana secundaria se recorta, lo que hace que un mensaje de WM_PAINT posterior a la ventana secundaria no sea necesario.
Las regiones de actualización y visibles de una ventana secundaria también se ven afectadas por los elementos del mismo nivel de la ventana secundaria. Las ventanas del mismo nivel son cualquier ventana que tenga una ventana principal común. Si las ventanas del mismo nivel se superponen, establecer la región de actualización para una afecta a la región de actualización de otra, lo que hace que los mensajes WM_PAINT se envíen a ambas ventanas. Si se compone una ventana de la cadena primaria (una ventana con WX_EX_COMPOSITED), las ventanas del mismo nivel reciben WM_PAINT mensajes en el orden inverso de su posición en el orden Z. Dado esto, la ventana más alta en el orden Z (en la parte superior) recibe su mensaje WM_PAINT último y viceversa. Si una ventana de la cadena primaria no está compuesta, las ventanas del mismo nivel reciben WM_PAINT mensajes en orden Z.
Las ventanas del mismo nivel no se recortan automáticamente. Un elemento relacionado puede dibujar sobre otro elemento relacionado superpuesto incluso si la ventana que está dibujando tiene una posición inferior en el orden Z. Una aplicación puede evitarlo especificando el estilo WS_CLIPSIBLINGS al crear las ventanas. Cuando se establece este estilo, el sistema excluye todas las partes de una ventana del mismo nivel superpuesta de la región visible de una ventana si la ventana del mismo nivel superpuesta tiene una posición superior en el orden Z.
Nota
Las regiones de actualización y visibles para las ventanas que tienen el estilo WS_POPUP o WS_POPUPWINDOW no se ven afectadas por sus ventanas primarias.