控制停靠到表单时调整大小期间的双缓冲?

时间:2018-01-07 11:15:23

标签: c# .net winforms gdi+ double-buffering

我有一个自定义的Control派生类,我想完全禁用任何自动双缓冲,因为我想用BufferedGraphics对象手动处理双缓冲。绘图在OnPaint中完成,Invalidate在MouseMove和Resize事件中调用,例如。

但是,如果使用DockStyle.Fill将Control嵌入到Form中,则无论我做什么,调整表单(以及随后的Control)的大小似乎都会启用双缓冲。虽然绘图相当复杂并且导致明显的延迟并且绘图结果最终变得可见,但我看不到闪烁。

另一方面,如果Control被另一个事件(MouseMove)无效,或者我设置了DockStyle.None并手动调整它(按Button测试),我会看到绘图过程中的闪烁,来自我得出结论,在这种情况下禁用双缓冲。

我已经排除了我仍然使用BufferedGraphics进行双缓冲(已经注释掉了这部分并直接绘制到PaintEventArgs.Graphics)。此外,在Form和/或Control的构造函数内设置DoubleBuffered=falseSetStyle(ControlStyles.OptimizedDoubleBuffer, false)不成功。

除了我的手动处理之外,保留默认的双缓冲似乎在性能方面没有太大差别(可能是因为在缓冲区中构建图像比将其传输到屏幕要慢得多,即使它已经完成两次)。但冗余感觉有些不整洁。

那么,如何为从Form传递给我的Control的Resize事件禁用双缓冲?

0 个答案:

没有答案