Рисование без сообщения WM_PAINT

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

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

При рисовании без использования сообщения WM_PAINT приложение обычно не делает окно недействительным. Вместо этого он рисует таким образом, что он может легко восстановить окно и удалить рисунок. Например, когда пользователь выбирает текст или объект, приложение обычно рисует выделение, инвертируя все, что уже находится в окне. Приложение может удалить выделение и восстановить исходное содержимое окна, просто переверив его снова.

Приложение отвечает за тщательное управление изменениями, внесенными в окно. В частности, если приложение рисует выделение и промежуточное WM_PAINT сообщение возникает, приложение должно убедиться, что любой рисунок, выполненный во время сообщения, не повреждает выделение. Чтобы избежать этого, многие приложения удаляют выделение, выполняют обычные операции рисования, а затем восстанавливают выделение после завершения рисования.