Compartir a través de


Bloqueo de actualización de ventana

Una bloqueo de actualización de ventana es una suspensión temporal del dibujo en una ventana. El sistema usa el bloqueo para evitar que otras ventanas extraen el rectángulo de seguimiento cada vez que el usuario mueve o cambia el tamaño de una ventana. Las aplicaciones pueden usar el bloqueo para evitar el dibujo si realizan operaciones similares de movimiento o ajuste de tamaño con sus propias ventanas.

Una aplicación usa la función LockWindowUpdate para establecer o borrar un bloqueo de actualización de ventana, especificando la ventana que se va a bloquear. El bloqueo se aplica a la ventana especificada y a todas sus ventanas secundarias. Cuando se establece el bloqueo, las funciones GetDC y BeginPaint devuelven un contexto de dispositivo para mostrar con una región visible vacía. Dado esto, la aplicación puede seguir dibujando en la ventana, pero se recorta toda la salida. El bloqueo persiste hasta que la aplicación la borra llamando a LockWindowUpdate, especificando NULL para la ventana. Aunque LockWindowUpdate obliga a que la región visible de una ventana esté vacía, la función no hace que la ventana especificada sea invisible y no borre el bit de estilo WS_VISIBLE.

Una vez establecido el bloqueo, la aplicación puede usar la funciónGetDCEx, con el valor DCX_LOCKWINDOWUPDATE, para recuperar un contexto de dispositivo para mostrar para dibujar en la ventana bloqueada. Esto permite que la aplicación dibuje un rectángulo de seguimiento al procesar mensajes de teclado o mouse. El sistema usa este método cuando el usuario mueve y cambia el tamaño de las ventanas. GetDCEx recupera el contexto del dispositivo para mostrar de la caché de contexto del dispositivo para mostrar, por lo que la aplicación debe liberar el contexto del dispositivo lo antes posible después del dibujo.

Mientras se establece un bloqueo de actualización de ventana, el sistema crea un rectángulo delimitador acumulado para cada ventana bloqueada. Cuando se borra el bloqueo, el sistema usa este rectángulo delimitador para establecer la región de actualización de la ventana y sus ventanas secundarias, forzando un mensaje de WM_PAINT final. Si el rectángulo delimitador acumulado está vacío (es decir, si no se ha producido ningún dibujo mientras se estableció el bloqueo), no se establece la región de actualización.