0

我想请教如何优化 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);
}

提前致谢。

4

1 回答 1

1

有个主意

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

我实现了它,到目前为止,关于重新绘制或绘制缓存看起来不错。

于 2010-06-08T02:28:26.183 回答