如何选择重绘形状保持其他完整

时间:2012-03-08 11:22:25

标签: c# graphics custom-controls windows-ce

我正在使用自定义控件开发Window CE应用程序。

在自定义控件中,我绘制了三个圆圈(一个圆圈填充),一个箭头一个文本和一个手动。它就像是Photoshop中的角度选择器。

现在,当我移动光标时,完全控制重绘并导致闪烁效果。

我尝试先将控件绘制到位图,然后在最后使用e.drawimage()方法绘制此位图,但同样闪烁问题。

现在我只有2个形状(箭头+线)需要重绘,其他形状具有静态行为

所以我的问题是有没有办法选择性地绘制形状保持其他完整。首先绘制所有形状,但只需绘制箭头和线条,然后将所有其他形状保持在原位。

这就是我在

中所做的

onPiant覆盖方法。

using (SolidBrush inLineFill = new SolidBrush(circleColor))
{
  Point[]  polyPoints = ...;                              
  e.Graphics.DrawLine(....);
  e.Graphics.FillPolygon(inLineFill, polyPoints);
  if (firstTime)
  {
    e.Graphics.DrawEllipse(...);
    e.Graphics.DrawEllipse(...);
    e.Graphics.DrawEllipse(...);
    e.Graphics.FillEllipse(...);
    e.Graphics.DrawString(...);
    firstTime = false ;
  }
}

我第一次看到完全控制但在此之后我只看到带箭头的箭头。

1 个答案:

答案 0 :(得分:2)

您可以采取一些措施来改善行为。

  • 覆盖OnPaintBackground并将其留空
  • 每次调用OnPaint时,缓存SolidBrush而不是创建新的
  • 将所有静态形状绘制到您缓存的成员级位图。在OnPaint中,对该图像执行DrawImage,然后执行箭头和直线(更改内容)。
  • 将所有这些绘图都放到一个Bitmap(你缓存,而不是每次都创建),然后将DrawImage绘制到屏幕图形
  • 如果您没有重叠的东西并且您有合理的矩形区域,设置剪裁区域以包围您的更改将防止不必要的绘制