背景 :我的客户端有一个非常广泛的专有表单库,它在C中被有效地实现了(实际上,它是一个专有的面向对象的语言,基本上封装了Windows控件,并通过SendMessage()
, SetStyle()
)
我想解决的问题 :每当我在上述框架中实现的应用程序中拖动/调整顶级窗口(或拖动分离器)时,都会出现大量闪烁。 顶层窗口被重新绘制,并且它包含的任何控件都会重新绘制。
问题1 :有没有办法通过手术将双caching引入到表单库中。 特别是,我想知道是否可以使用标准的Windows GDI函数实现双缓冲。
例如 ,如果我可以使顶层窗口被双缓冲,那么顶层窗口的所有子窗口都会自动被双缓冲。 更好的select是能够在任意窗口中引入双缓冲,并让所有的子节点inheritance这个。
最好的解决scheme将以某种方式导致子控件的BeginPaint()
函数将一个句柄返回到屏幕外缓冲区的DC中,这样我就不必为每个单独的控件类编写特殊的代码。
问题2 :是否有一种方法(如一组标志)导致通用Windows控件(编辑,button等)绘制自己双缓冲? 这将是一个更糟的解决scheme,而不是一个更通用的方法,只是无缝地给他们后备缓冲区,但也可以接受。
所有帮助非常感谢。 请让我知道,如果我能为你澄清任何事情。
看看WS_EX_COMPOSITED ,这是一个扩展窗口样式,打开窗口的双缓冲。 在控件的父级上设置此样式可能就足够了。
你实际上可能能够用C语言来包装所有的窗口绘图代码,这样C就已经有了一个双缓冲的实现。
如何消除Windows中的闪烁。滚动时自定义控件?