如何防止GDI+在绘制时重新绘制所有内容?

3
我想改变使用GDI+绘制自身的控件特定部分的颜色,例如当某些对象被悬停/点击时。
如何重新绘制只需要更改的部分?当我只需要更改其中几个像素时,重新绘制成千上万个像素似乎很糟糕。
具体而言,我已经绘制了1到128个矩形,并且在各种事件中需要重新绘制1到128个矩形。我不想重新绘制128个矩形以仅更改1-127个矩形。
我已经阅读过在不是Paint事件的位置使用绘图代码是一个坏主意。但是,在依赖于Paint事件的情况下,是否有可能做到这一点?

简单的方法是将每个“矩形”作为一个具有自己的绘制例程的控件。然后,设置另一种容器类型控件来“知道”它所拥有的矩形控件。 - Tony Hopkinson
1
这在Windows中已经通过PaintEventArgs.ClipRectangle属性进行了大量优化。 任何你在该矩形之外绘制的内容都会非常快速地完成,而不会浪费计算资源。 只需使用Invalidate(Rectangle)来设置它即可。 - Hans Passant
1
Invalidate() 与矩形结合使用非常完美,谢谢!~ - mina
1个回答

6

您可以使用 Control.Invalidate 方法之一来指定需要重新绘制的区域。
然后在 Paint 事件处理程序中,您可以使用 e.ClipRectangle 属性检查失效区域。


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