Хотя приложения выполняют большинство операций рисования в ходе обработки сообщения WM_PAINT, иногда более эффективно для программы рисовать непосредственно в окне, не завися от сообщения WM_PAINT. Это может быть полезным, когда пользователь нуждается в немедленной обратной связи, такой как выбор текста и перемещение или установка размеров объекта. В таких случаях, приложение обычно рисует в ходе обработки сообщений клавиатуры или мыши.
Чтобы рисовать в окне, не используя сообщение WM_PAINT, программа использует функцию GetDC или GetDCEx, чтобы извлечь контекст устройства (DC) отображения для окна. С контекстом устройства отображения приложение может рисовать в окне и избегать быть помехой для других окон. Когда программа заканчивает рисовать, она вызывает функцию ReleaseDC, чтобы освободить контекст устройства (DC) отображения для использования его другими приложениями.
Когда происходит рисование без использования сообщения WM_PAINT, приложение обычно не делает окно недействительным. Вместо этого оно рисует в таком режиме, при котором оно может легко восстановить окно и удалить нарисованное. Например, когда пользователь выбирает текст или объект, программа обычно рисует выбор, инвертируя независимо от того, что уже находится в окне. Приложение может удалить выбор и восстановить исходное содержимое окна, просто инвертируя снова.
Приложение ответственно за осторожное управление любыми изменениями, которые оно делает в окне. В частности, если программа рисует выбор и происходит вмешательство сообщения WM_PAINT, то приложение должно гарантировать, что любое рисование, сделанное в ходе обработки сообщения, не разрушает выбор. Чтобы избежать этого, большинство приложений удаляют выбор, выполняют обычные операции рисования, а затем восстанавливают выбор, когда рисование завершается полностью.