Dibujar sin el mensaje de WM_PAINT
Aunque las aplicaciones realizan la mayoría de las operaciones de dibujo mientras el mensaje WM_PAINT está procesando, a veces es más eficaz que una aplicación se dibuje directamente en una ventana sin depender del mensaje de WM_PAINT . Esto puede ser útil cuando el usuario necesita comentarios inmediatos, como al seleccionar texto y arrastrar o cambiar el tamaño de un objeto. En tales casos, la aplicación normalmente dibuja mientras procesa mensajes de teclado o mouse.
Para dibujar en una ventana sin usar un mensaje de WM_PAINT, la aplicación usa la función GetDC o GetDCEx para recuperar un contexto de dispositivo para mostrar para la ventana. Con el contexto del dispositivo de visualización, la aplicación puede dibujar en la ventana y evitar la intrusión en otras ventanas. Cuando la aplicación haya terminado de dibujar, llama a la función ReleaseDC para liberar el contexto del dispositivo para mostrar para que lo usen otras aplicaciones.
Cuando se dibuja sin usar un mensaje de WM_PAINT , la aplicación normalmente no invalida la ventana. En su lugar, dibuja de tal manera que pueda restaurar fácilmente la ventana y quitar el dibujo. Por ejemplo, cuando el usuario selecciona texto o un objeto, la aplicación normalmente dibuja la selección invirtiendo lo que ya está en la ventana. La aplicación puede quitar la selección y restaurar el contenido original de la ventana simplemente invertiendo de nuevo.
La aplicación es responsable de administrar cuidadosamente los cambios que realice en la ventana. En concreto, si una aplicación dibuja una selección y se produce un mensaje de WM_PAINT intermedio, la aplicación debe asegurarse de que cualquier dibujo realizado durante el mensaje no dañe la selección. Para evitar esto, muchas aplicaciones quitan la selección, realizan operaciones de dibujo habituales y, a continuación, restauran la selección cuando se completa el dibujo.