【发布时间】:2011-04-23 03:47:43
【问题描述】:
默认的 winAPI 应用程序没有双缓冲。相反,它在确保只绘制需要绘制的内容方面做得非常非常好,这给了它一个无缝的外观。但是,当您调整窗口大小时,需要重新绘制整个内容,这会导致控件、选项卡上的背景以及有时选项卡的白色之间闪烁。
所以我的问题是,在我的应用程序中支持双缓冲的最简单方法是什么?
【问题讨论】:
标签: c++ winapi double-buffering
默认的 winAPI 应用程序没有双缓冲。相反,它在确保只绘制需要绘制的内容方面做得非常非常好,这给了它一个无缝的外观。但是,当您调整窗口大小时,需要重新绘制整个内容,这会导致控件、选项卡上的背景以及有时选项卡的白色之间闪烁。
所以我的问题是,在我的应用程序中支持双缓冲的最简单方法是什么?
【问题讨论】:
标签: c++ winapi double-buffering
创建一个窗口大小的位图,渲染到该位图中,然后在完成后将其blit 回到窗口中。
您可以在现有代码中进行非常直接的就地替换。不要使用渲染到窗口中的设备上下文,而是使用渲染到位图中的设备上下文,并且只使用原始 DC 将位图 blit 返回。
请务必保留位图 - 不要在每次绘制调用时都创建它。您只需要在调整窗口大小时重新创建它。
【讨论】:
请看以下文章:Flicker-Free Displays Using an Off-Screen DC。
本文描述了一种技术 绘制到窗口设备上下文 (DC) 以这样的方式使屏幕 不闪烁。该技术是 非常简单,易于实现。
几年前我从这个教程中学会了如何防止闪烁。
【讨论】: