在System.Windows.Forms.Control的继承者中重写OnPaint或OnPaintBackground方法时,一个参数始终是System.Windows.Forms.PaintEventArgs对象。部分对象结构:
Graphics.Clip 似乎是适用于后续绘画操作的像素的1位地图。
MSDN:“获取或设置一个限制此图形的绘图区域的区域。”
Graphics.ClipBounds 是一个只读矩形,似乎是完全包含Clip区域的最小矩形。
MSDN:“获取一个RectangleF结构,该结构绑定了此Graphics的剪切区域。”
Graphics.VisibleClipBounds 似乎是一个更“智能”的剪辑,但我无法理解它是如何运作的。
在所有情况下,MSDN:“获取此图形的可见剪裁区域的边界矩形。”
ClipRectangle 似乎都会复制Graphics.ClipBounds属性。
MSDN:“获取要绘制的矩形。”
有人可以回答主要问题并可能阐明所有各种边界对象的用途吗?
编辑:根据Dan-o的回答添加了MSDN的描述。
答案 0 :(得分:12)
PaintEventArgs.ClipRectangle是Paint事件实际需要绘制的矩形。通常等于控件客户区的大小。当只有一部分与另一个窗口重叠时,它会更小。或者当您调用其Invalidate(Rectangle)方法时。您可以使用它来跳过绘制超出该矩形的昂贵对象。这是非常罕见的,Windows本身已经很好地削减了你绘制的内容。
Graphics.Clip是一个区域,您可以在绘图代码中指定它来剪裁您自己绘制的内容。它允许各种效果,例如绘制由圆圈剪裁的图像。或者使用转换为区域的GraphicsPath的非常复杂的剪切效果。
Graphics.ClipBounds是Graphics.Clip周围的矩形,它使得数学更快得到一阶估计,无论一个点是否在Graphics.Clip之外。如果您从未指定Clip属性(X = -4194304,Y = -4194304,Width = 8388608,Height = 8388608),您将获得无意义的“无限”剪辑边界
Graphics.VisibleClipBounds与Graphics.ClipBounds相同,但也被控制窗口剪切。如此有用的话可以测试一个点是否 in 用户可以看到Clip区域和。如果您从未分配Clip属性,那么您只需获取窗口的大小。
因此,Windows设置了PaintEventArgs.ClipRectangle。其余部分由您通过分配Graphics.Clip属性来设置。