NETCF - 优化重绘(onPaint)

时间:2010-06-08 00:15:47

标签: compact-framework onpaint

我想询问有关如何在Compact Framework中优化重绘的建议? GetHashCode()没有帮助,因为它总是返回不同的哈希码。

无论如何,我有一个程序,你可以在运行时拖动和调整对象的大小。此对象是透明对象,它具有PNG图像,该图像也相对于对象客户端大小动态调整大小。

虽然我注意到了,(例如我有4个透明对象,我正在拖动或调整其中一个)所有4个触发OnPaintBackground,即使3个没有移动。另一个当我只是点击一个对象时......它会触发onPaintBacground()。无论如何,当这个事件被触发时我没有问题。

我喜欢做的是优化,这意味着我只需要在必要时重新绘制对象。

你们可以提出建议吗?

这是我的伪C#代码

Bitmap _backBuff;
onResize() {
   if(_backBuff != null) _backBuff.Dispose();
   _backBuff = new Bitmap(ClientSize.Width, ClientSize.Height);
   Invalidate();
}

onPaintBackground(e) /*have to use onPaintBackground because MSDN said it's faster*/ {
   using(Graphics g = Graphics.FromImage(_backBuff)) {
      g.Clear(Color.Black);

      // draw background
      ....some interface calling here
      ....and paint the background

      // draw alpha PNG
      .. get hDc
      .. paint PNG
      .. release hDc
   }

   e.Graphics.DrawImage(_backBuff,0,0);
}

提前致谢。

1 个答案:

答案 0 :(得分:1)

有个主意

我必须检查旧位置之间的新位置或新尺寸差异。如果其中一个是新的,那么重新绘制.. else ..绘制_backBuff(用作缓存图像)。

我实现了它,到目前为止看起来很好的重新绘制或绘制缓存。