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