在C和Windows GDI中缓冲* framework *

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

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

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

例如,如果我可以使顶层窗口进行双缓冲,那么顶层窗口的所有子窗口都会自动被双缓冲。 一个更好的选择是能够在任意窗口中引入双缓冲,并让它的所有子节点继承这个。

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

问题2 :是否有一种方法(例如一组标志)导致通用Windows控件(编辑,按钮等)自行绘制双缓冲? 这将是一个更糟糕的解决方案,而不是一个更通用的方法,只是无缝地给他们后台缓冲区来绘制,但它也可能是可以接受的。

所有帮助非常感谢。 请让我知道我是否可以为你澄清任何事情。


看看WS_EX_COMPOSITED,这是一个扩展窗口样式,打开窗口的双缓冲区。 在控件的父级上设置此样式可能已足够。


实际上,你可能可以将所有的窗口绘图代码用C语言来执行,这样就可以为你实现一个双缓冲实现。

如何消除Windows中的闪烁。滚动时自定义控件?

链接地址: http://www.djcxy.com/p/50309.html

上一篇: buffering *framework* in C and Windows GDI

下一篇: Can I get HDC from WPF window so that I can draw to it with Gdi+ API?