Compartir a través de


Dibujo sincrónico y asincrónico

La mayoría de los dibujos realizados durante el procesamiento del mensaje WM_PAINT son asincrónicos; es decir, hay un retraso entre el momento en que se invalida una parte de la ventana y el momento en que se envía WM_PAINT. Durante el retraso, la aplicación normalmente recupera los mensajes de la cola y lleva a cabo otras tareas. La razón del retraso es que el sistema generalmente trata el dibujo en una ventana como una operación de prioridad baja y funciona como si los mensajes y mensajes de entrada del usuario que puedan afectar a la posición o el tamaño de una ventana se procesarán antes de WM_PAINT .

En algunos casos, es necesario que una aplicación dibuje de forma sincrónica, dibuje en la ventana inmediatamente después de invalidar una parte de la ventana. Una aplicación típica dibuja su ventana principal inmediatamente después de crear la ventana para indicar al usuario que la aplicación se ha iniciado correctamente. El sistema dibuja algunas ventanas de control de forma sincrónica, como botones, ya que estas ventanas sirven como foco para la entrada del usuario. Aunque cualquier ventana con una rutina de dibujo simple se puede dibujar sincrónicamente, todo este dibujo debe realizarse rápidamente y no debe interferir con la capacidad de la aplicación para responder a la entrada del usuario.

Las funciones UpdateWindow y RedrawWindow permiten dibujar sincrónicamente. UpdateWindow envía un mensaje de WM_PAINT directamente a la ventana si la región de actualización no está vacía. RedrawWindow también envía un mensaje de WM_PAINT, pero proporciona a la aplicación un mayor control sobre cómo dibujar la ventana, como si se va a dibujar el área no cliente y el fondo de la ventana, o si se envía el mensaje independientemente de si la región de actualización está vacía. Estas funciones envían el mensaje WM_PAINT directamente a la ventana, independientemente del número de otros mensajes de la cola de mensajes de la aplicación.

Cualquier ventana que requiera operaciones de dibujo que consuman mucho tiempo se debe dibujar de forma asincrónica para evitar que se bloqueen los mensajes pendientes a medida que se dibuja la ventana. Además, cualquier aplicación que invalide con frecuencia pequeñas partes de una ventana debe permitir que estas partes no válidas se consoliden en un único mensaje de WM_PAINT asincrónico, en lugar de una serie de mensajes de WM_PAINT sincrónicos.