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