.NET PowerPacks RectangleShape在表单调整大小时闪烁

时间:2011-07-05 16:39:12

标签: .net gdi+ powerpacks

我可以做一些简单的事情:

  1. 创建新的.NET表单应用程序
  2. 将单个RectangleShape放在表单
  3. 将以下内容添加到设计器代码

    中的InitializeComponent方法中
    Me.SetStyle(ControlStyles.AllPaintingInWmPaint Or _
        ControlStyles.UserPaint Or _
        ControlStyles.DoubleBuffer, True)
    Me.UpdateStyles()
    
  4. 运行程序
  5. 调整表单大小
  6. 愤怒地看着矩形闪烁
  7. 有可能摆脱这个吗?或者ShapeContainer内部存在缺陷,我需要找到不同的解决方案吗?

2 个答案:

答案 0 :(得分:2)

这是相当有缺陷的。它使用自己的窗口覆盖到窗体上,并打开WS_EX_TRANSPARENT样式。这种风格使它看不见,但也防止任何类型的双缓冲工作正常。双缓冲表单没有效果,错误的窗口。

这是绘制形状的一种相当昂贵的方式。廉价且无闪烁的方式是在形式的OnPaint()覆盖或Paint事件处理程序中使用e.Graphics.FillRectangle()。

答案 1 :(得分:0)

我从来没有使用过ShapeContainer,但是当我做这样的自定义图形时,我为Panel创建了一个子类,在我的子类的构造函数中,我将DoubleBuffered设置为true。

更具体的代码示例here