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 es asincrónico; es decir, hay un retraso entre el momento en que se invalida una parte de la ventana y se envía la hora WM_PAINT. Durante el retraso, la aplicación normalmente recupera mensajes de la cola y lleva a cabo otras tareas. El motivo del retraso es que el sistema suele tratar 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 pudieran 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, es decir, 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 el foco para la entrada del usuario. Aunque cualquier ventana con una rutina de dibujo simple se puede dibujar de forma sincrónica, 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 debe dibujar el fondo del área no cliente y 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 con mucho tiempo se debe dibujar de forma asincrónica para evitar que los mensajes pendientes se bloqueen 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 asincrónico de WM_PAINT , en lugar de una serie de mensajes de WM_PAINT sincrónicos.