Вопрос

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

Таким образом, мой вопрос, какой самый простой способ поддержать двойную буферизацию в моем приложении?

Это было полезно?

Решение

Создайте растровое изображение в размере окна, рендерируйте это растровое изображение и свяжитесь с обратно в окно, когда вы закончите.

Вы можете сделать довольно прямое замену на месте в вашем существующем коде. Вместо того, чтобы использовать контекст устройства, который отображается в окно, используйте один, который отображается в растровое изображение, и используйте оригинальный DC для Blit Bitmap обратно.

Обязательно сохраните растровое изображение - не создавайте его в каждом вызове краски. Вам просто нужно воссоздать его, когда окно изменяется.

Другие советы

Посмотрите на следующую статью: Flicker-Free Displays, используя неэкранный DC.

В этой статье описана методика для рисования в контексте окна устройства (DC) таким образом, чтобы экран не мерцал. Техника очень проста и простой в реализации.

Я узнал, как предотвратить мерцание из этого урока несколько лет назад.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top