WinAPI Двойная буферизация - PullRequest
4 голосов
/ 09 октября 2010

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

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

Ответы [ 2 ]

6 голосов
/ 09 октября 2010

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

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

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

3 голосов
/ 09 октября 2010

Взгляните на следующую статью: Дисплеи без мерцания, использующие DC вне экрана .

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

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

...