Compartir a través de


Bloqueo de actualización de ventana

Un 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 se dibujen sobre 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 llevan a cabo operaciones de cambio de tamaño o movimiento similares 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 que está 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ón GetDCEx , con el valor de DCX_LOCKWINDOWUPDATE, para recuperar un contexto de dispositivo para mostrar para dibujar sobre 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 memoria caché del 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 de límite 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, lo que fuerza 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.