【发布时间】:2010-09-21 15:41:00
【问题描述】:
如何从 Graphics 对象中检索(控件的)客户矩形?我认为 Graphics 对象应该知道它要绘制的区域的坐标,但我不知道如何实际获取它。
编辑: 如答案中所述,应该可以访问为其创建 Graphics 对象的控件。这显然可以解决问题(实际上这是我目前用作解决方法的解决方案),但我故意要求一种没有控制的方法,只是因为我认为它应该是可能的。
【问题讨论】:
如何从 Graphics 对象中检索(控件的)客户矩形?我认为 Graphics 对象应该知道它要绘制的区域的坐标,但我不知道如何实际获取它。
编辑: 如答案中所述,应该可以访问为其创建 Graphics 对象的控件。这显然可以解决问题(实际上这是我目前用作解决方法的解决方案),但我故意要求一种没有控制的方法,只是因为我认为它应该是可能的。
【问题讨论】:
如果你没有设置 Clip 属性来进一步限制绘图区域,它的默认设置将是整个图形区域,所以你应该可以使用 Clip.GetBounds() 返回一个描述绘图区域的 RectangleF。 ClipBounds 是 Graphics 对象本身的一个属性,它将返回相同的数据。
如果您知道图形区域是从哪个控件生成的,您还可以使用控件的高度和宽度;图形区域应该是相同的尺寸。
编辑:Grr。有人知道这个图形区域是从什么控件创建的。它很可能是您的渲染库方法之一的直接调用者。因此,如果您在方法中需要绘图区域的可用限制,我只需要您的调用者:接受可以应用于 Graphics.ClipBounds 的 System.Drawing.Size 或 System.Drawing.Rectangle 参数,或者要求通过测试 Clip.IsInfinite() 预先裁剪图形区域,如果为真则抛出异常。
【讨论】: