Необходимо ли сделать недействительным регион обновления перед окраской в ​​окне

Нужно ли делать недействительным регион обновления перед немедленным рисованием (в ответ на действия пользователя), если я использую Direct2D? Или звонит RenderTarget::BeginDraw() довольно? Мне нужно быстро перекрасить какую-то часть окна за пределами WM_PAINT сообщение. Если я не аннулирую область обновления, иногда вся клиентская область окна становится черной, рисунки не видны. Но если я сделаю недействительным регион обновления, система отправит WM_PAINT перед проверкой области обновления, что приводит к необходимости выполнения ненужных операций рисования. Как мне реализовать немедленные операции рисования вне WM_PAINT обработчик сообщений, если я использую Direct2D?

0

Решение

Аннулирование и проверка — это способы получить сообщение WM_PAINT и обработать его. Если вы рисуете вне обработчика WM_PAINT, вы не должны аннулировать или проверять как часть этого чертежа.

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

0

Другие решения

Обычно при использовании Direct2D в игровом приложении вы не выполняете рисование в WM_PAINT и рисуете с использованием Direct2D много раз в секунду. Другой распространенный прием, когда вы рисуете что-то один раз и не создаете новый рисунок много раз в секунду, — это сохранение рисунка в каком-то заднем буфере; таким образом, вы можете «перетащить» его на экран в ответ на сообщение WM_PAINT.

Конечно, это может отличаться для вашего случая, в зависимости от типа программы, которую вы создаете.

0

По вопросам рекламы [email protected]