gpt4 book ai didi

c - C 和 Windows GDI 中的双缓冲*框架*

转载 作者:可可西里 更新时间:2023-11-01 11:56:03 25 4
gpt4 key购买 nike

背景:我的客户有一个非常广泛的专有表单库,它在 C 中有效地实现(实际上,它是一种专有的面向对象的语言,基本上包装 Windows 控件并与它们交互 SendMessage()SetStyle()等)

我要解决的问题:每当我在上述框架中实现的应用程序中拖动/调整顶层窗口(或拖动拆分器)时,都会出现大量闪烁。顶层窗口被重新绘制,它包含的任何控件都会重新绘制。

问题 1:有没有办法通过外科手术将双缓冲引入表单库。特别是,我想知道是否可以使用标准 Windows GDI 函数实现双缓冲。

例如,如果我可以使顶层窗口进行双缓冲,这样顶层窗口的所有子窗口也自动进行双缓冲绘制。一个更好的选择是能够在任意窗口上引入双缓冲,并让其所有子窗口继承它。

最好的解决方案是以某种方式使子控件的 BeginPaint() 函数返回到屏幕外后台缓冲区的 DC 的句柄,这样我就不必为每个单独的个体编写特殊代码控制类。

问题 2:是否有一种方法(例如一组标志)使通用 Windows 控件(EDIT、BUTTON 等)将自身绘制为双缓冲?与更通用的方法相比,这将是一个更糟糕的解决方案,后者只会无缝地为他们提供后台缓冲区以供使用,但它也可能是可以接受的。

非常感谢所有帮助。如果我能为您澄清任何事情,请告诉我。

最佳答案

查看WS_EX_COMPOSITED ,这是一种扩展窗口样式,可以为窗口打开双缓冲。在控件的父级上设置此样式可能就足够了。

关于c - C 和 Windows GDI 中的双缓冲*框架*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16526278/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com