2015-06-29 33 views
0

我有一个窗体显示几个图形,并为了改善图形渲染时的视觉体验我已使用this piece of code启用双缓冲。Winforms双缓冲关闭后最小化形式

当我执行应用程序时没有最小化/最大化窗体,双缓冲工程很好,但如果我碰巧最小化窗体并再次最大化,现在双缓冲不再工作,图形重新绘制可见闪烁。

那么有没有办法打开双缓冲每次形式得到最小化/最大化?

回答

0

试试这个代码

bool hasMinimized; 
void SizeChangedCallback(object sender, EventArgs e) { 
    if (WindowState == FormWindowState.Minimized) { 
     hasMinimized = true; 
    } else { 
     if (hasMinimized) { 
      hasMinimized = false; 
      /* Call SetStyle() in here */ 
     } 
    } 
} 

你必须窗体的SizeChanged事件链接到SizeChangedCallback
这样的:

this.SizeChanged += SizeChangedCallback; 
+0

此代码仅控制形式的'WindowState'财产,但不这样做的双缓冲相关的任何东西。在哪里以及如何在代码中调用'protected protected CreateParams CreateParams'方法? – codeaviator

+0

如果您询问如何调用'protected override CreateParams CreateParams',您的问题是错误的。 CreateParams属性只能在表单创建时一次访问。 要重载'CreateParams',打开你的表单的源代码并键入[this code](http://stackoverflow.com/questions/3718380/winforms-double-buffering/37186​​48#37186​​48) 或者你可以替换'/ *在这里* /'调用SetStyle()到'SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint | ControlStyles.DoubleBuffer,true);' – SlaneR

+0

希望对你有所帮助 – SlaneR