Partilhar via


Desenho síncrono e assíncrono

A maioria dos desenhos realizados durante o processamento da mensagem WM_PAINT é assíncrona; ou seja, há um atraso entre o tempo em que uma parte da janela é invalidada e a hora em que WM_PAINT é enviada. Durante o atraso, o aplicativo normalmente recupera mensagens da fila e executa outras tarefas. O motivo do atraso é que o sistema geralmente trata o desenho em uma janela como uma operação de baixa prioridade e funciona como se mensagens de entrada do usuário e mensagens que possam afetar a posição ou o tamanho de uma janela sejam processadas antes de WM_PAINT .

Em alguns casos, é necessário que um aplicativo desenhe de forma síncrona, ou seja, desenhe na janela imediatamente após invalidar uma parte da janela. Um aplicativo típico desenha sua janela main imediatamente após a criação da janela para sinalizar ao usuário que o aplicativo foi iniciado com êxito. O sistema desenha algumas janelas de controle de forma síncrona, como botões, porque essas janelas servem como o foco para a entrada do usuário. Embora qualquer janela com uma rotina de desenho simples possa ser desenhada de forma síncrona, todo esse desenho deve ser feito rapidamente e não deve interferir na capacidade do aplicativo de responder à entrada do usuário.

As funções UpdateWindow e RedrawWindow permitem desenho síncrono. UpdateWindow enviará uma mensagem WM_PAINT diretamente para a janela se a região de atualização não estiver vazia. RedrawWindow também envia uma mensagem de WM_PAINT , mas dá ao aplicativo maior controle sobre como desenhar a janela, como desenhar a área não cliente e o plano de fundo da janela ou se deseja enviar a mensagem independentemente de a região de atualização estar vazia. Essas funções enviam a mensagem WM_PAINT diretamente para a janela, independentemente do número de outras mensagens na fila de mensagens do aplicativo.

Qualquer janela que exija operações de desenho demoradas deve ser desenhada de forma assíncrona para impedir que mensagens pendentes sejam bloqueadas à medida que a janela é desenhada. Além disso, qualquer aplicativo que invalide frequentemente pequenas partes de uma janela deve permitir que essas partes inválidas se consolidem em uma única mensagem de WM_PAINT assíncrona , em vez de uma série de mensagens WM_PAINT síncronas.