Desenho sem a mensagem de WM_PAINT

Embora os aplicativos executem a maioria das operações de desenho enquanto a mensagem WM_PAINT está sendo processada, às vezes é mais eficiente para um aplicativo desenhar diretamente em uma janela sem depender da mensagem WM_PAINT . Isso pode ser útil quando o usuário precisa de comentários imediatos, como ao selecionar texto e arrastar ou dimensionar um objeto. Nesses casos, o aplicativo geralmente desenha durante o processamento de mensagens de teclado ou mouse.

Para desenhar em uma janela sem usar uma mensagem de WM_PAINT , o aplicativo usa a função GetDC ou GetDCEx para recuperar um contexto de dispositivo de exibição para a janela. Com o contexto do dispositivo de exibição, o aplicativo pode desenhar na janela e evitar a intrusão em outras janelas. Quando o aplicativo terminar de desenhar, ele chamará a função ReleaseDC para liberar o contexto do dispositivo de exibição para uso por outros aplicativos.

Ao desenhar sem usar uma mensagem WM_PAINT , o aplicativo geralmente não invalida a janela. Em vez disso, ele desenha de tal forma que pode restaurar facilmente a janela e remover o desenho. Por exemplo, quando o usuário seleciona texto ou um objeto, o aplicativo normalmente desenha a seleção invertendo o que já está na janela. O aplicativo pode remover a seleção e restaurar o conteúdo original da janela simplesmente invertendo novamente.

O aplicativo é responsável por gerenciar cuidadosamente as alterações feitas na janela. Em particular, se um aplicativo desenhar uma seleção e ocorrer uma mensagem de WM_PAINT intermediária, o aplicativo deverá garantir que qualquer desenho feito durante a mensagem não corrompa a seleção. Para evitar isso, muitos aplicativos removem a seleção, executam operações de desenho usuais e restauram a seleção quando o desenho é concluído.