Поделиться через


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

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

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

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

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