双缓冲并不能减少闪烁问题

3

我正在面板中绘制一组对象的网格。当我快速滚动面板时,会出现闪烁现象。我曾尝试启用双缓冲来解决这个问题,但我发现它并没有完全绘制所有内容,留下了空白部分。

请问有人能给我建议,可能发生了什么以及如何进行更正。

更新:

我发现我使用Creategraphics()创建了图形对象,而不是使用paint方法中的参数。

1个回答

1

你是如何设置双缓冲的?

你应该将控件的 DoubleBuffered 属性设为 true。

public UserControl1()
{
  InitializeComponent();
  this.DoubleBuffered = true;
}

或者

使用SetStyle,并设置OptimizedBoubleBuffer和AllPaintingInWmPaint两个属性

public UserControl1()
{
  InitializeComponent();
  SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint, true);      
}

ControlStyles.AllPaintingInWmPaint指示控件忽略WM_ERASEBKGND消息。这将减少您从滚动中看到的闪烁。当将DoubleBuffered属性设置为true时,实际上隐含了这一点,事实上它会与第二个示例中的SetStyle进行相同的调用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接