C# PaintEventArgs中图形对象的绘图面是否相对于ClipEventArgs?
我正在覆盖控件中的OnPaint。有时,我的控件会因剪切矩形(C# PaintEventArgs中图形对象的绘图面是否相对于ClipEventArgs?,c#,.net,winforms,gdi+,system.drawing,C#,.net,Winforms,Gdi+,System.drawing,我正在覆盖控件中的OnPaint。有时,我的控件会因剪切矩形(e.ClipRectangle)而失效,该矩形小于控件的大小 在我的OnPaint方法中,当我绘制到GDI+曲面(对象来自)时,我是相对于开始还是相对于控件开始 例如,假设我的控件是800x600像素。如果我打电话: Invalidate(new Rectangle(42, 0, 100, 600)); 然后在OnPaint中,我画了一个字符串: e.Graphics.DrawString("Don't panic.", new F
e.ClipRectangle
)而失效,该矩形小于控件的大小
在我的OnPaint
方法中,当我绘制到GDI+曲面(对象来自)时,我是相对于开始还是相对于控件开始
例如,假设我的控件是800x600像素。如果我打电话:
Invalidate(new Rectangle(42, 0, 100, 600));
然后在OnPaint
中,我画了一个字符串:
e.Graphics.DrawString("Don't panic.", new Font("Arial", 12), new Brush(Color.Red), 0, 0);
字符串是显示在控件左侧,还是显示在控件左侧42像素处?绘图必须始终与控件的客户端矩形相对。这是一个常见的错误,使它相对于e.ClipRectangle,在Aero上也工作了相当长一段时间,因为当您拖动另一个窗口时,它不再使窗口无效。关闭Aero时会产生非常有趣的图形效果,看起来就像是回声的图形
您应该只使用e.ClipRectangle来优化图形代码,当图形完全位于剪裁区域之外时跳过部分图形。Graphics在自动剪辑方面已经做得很好了,让这样的剪辑测试获得回报并不是那么容易。当不是所有的东西都被剪裁时,这是非常困难的,永远不要优化它。启用Aero后,剩下的点很少了。绘图必须始终与控件的客户端矩形相对。这是一个常见的错误,使它相对于e.ClipRectangle,在Aero上也工作了相当长一段时间,因为当您拖动另一个窗口时,它不再使窗口无效。关闭Aero时会产生非常有趣的图形效果,看起来就像是回声的图形
您应该只使用e.ClipRectangle来优化图形代码,当图形完全位于剪裁区域之外时跳过部分图形。Graphics在自动剪辑方面已经做得很好了,让这样的剪辑测试获得回报并不是那么容易。当不是所有的东西都被剪裁时,这是非常困难的,永远不要优化它。启用Aero后就没有什么意义了。似乎很容易测试,不是吗?是的,但我在键入问题后意识到:)似乎很容易测试,不是吗?是的,但我在键入问题后意识到:)