Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# PaintEventArgs中图形对象的绘图面是否相对于ClipEventArgs?_C#_.net_Winforms_Gdi+_System.drawing - Fatal编程技术网

C# PaintEventArgs中图形对象的绘图面是否相对于ClipEventArgs?

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

我正在覆盖控件中的OnPaint。有时,我的控件会因剪切矩形(
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后就没有什么意义了。

似乎很容易测试,不是吗?是的,但我在键入问题后意识到:)似乎很容易测试,不是吗?是的,但我在键入问题后意识到:)