【发布时间】:2015-09-15 08:50:27
【问题描述】:
我有一个显示多个图形的表单,为了在渲染图形时改善视觉体验,我使用了启用双缓冲的this piece of code。
当我在不最小化/最大化表单的情况下执行应用程序时,双缓冲效果很好,但如果我碰巧将表单最小化并再次最大化它,现在双缓冲不再起作用,并且图形会重新绘制可见闪烁。
那么有没有办法在每次表单最小化/最大化时打开双缓冲?
【问题讨论】:
标签: c# winforms flicker doublebuffered
我有一个显示多个图形的表单,为了在渲染图形时改善视觉体验,我使用了启用双缓冲的this piece of code。
当我在不最小化/最大化表单的情况下执行应用程序时,双缓冲效果很好,但如果我碰巧将表单最小化并再次最大化它,现在双缓冲不再起作用,并且图形会重新绘制可见闪烁。
那么有没有办法在每次表单最小化/最大化时打开双缓冲?
【问题讨论】:
标签: c# winforms flicker doublebuffered
试试这个代码
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;
【讨论】:
WindowState属性,不做任何与双缓冲相关的事情。我应该在哪里以及如何在您的代码中调用protected override CreateParams CreateParams 方法?
protected override CreateParams CreateParams,您的问题是错误的。 CreateParams 属性仅在创建表单时一次访问。要覆盖CreateParams,请打开表单的源代码并输入this code,或者您可以将/* Call SetStyle() in here */ 替换为SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint | ControlStyles.DoubleBuffer, true);