前言:
学习笔记,随时更新。如有谬误,欢迎指正。
说明:
- 红色字体为较为重要部分。
- 绿色字体为个人理解部分。
原文链接:https://learn.microsoft.com/en-us/windows/win32/gdi/clipping
3 裁剪
- 剪裁是将输出限制为应用程序窗口的工作区中的某个区域或路径的过程。
3.1 关于裁剪
-
应用程序通过多种方式使用剪裁。 Word 和 Excel 应用程序剪裁键盘输入,使其不显示在页面或电子表格的边距中。 CAD 和绘制应用程序剪裁图形输出,使其不覆盖绘制或图片的边缘。
-
剪裁区域是一个边缘为直线或曲线的区域。剪裁路径是具有直线、贝塞尔曲线或两者组合的边缘的区域。 有关区域的详细信息,请参阅区域。 有关路径的详细信息,请参阅路径。
3.1.1 裁剪区域
-
裁剪区域是应用程序可以选择到设备上下文( DC )中的图形对象之一。它是通常是矩形的。一些设备上下文提供预定义的或默认的裁剪区域,而另一些则没有。例如,如果你从 BeginPaint 函数获得一个设备上下文句柄,则 DC 包含一个预定义的矩形剪切区域,该区域对应于需要重新绘制的无效矩形。但是,当你通过调用带空的 hWnd 参数的 GetDC 函数或调用 CreateDC 函数获得设备上下文句柄时, DC 不包含默认的裁剪区域。有关 BeginPaint 函数返回的设备上下文的更多信息,请参见绘画和绘制。有关 CreateDC 和 GetDC 函数返回的设备上下文的更多信息,请参见设备上下文。
-
应用程序可以对剪裁区域执行各种操作。其中一些操作需要区域的句柄,而有些则不需要。
不需要句柄的操作,比如:
- 通过将相应线条、弧线、位图、文本或填充形状的坐标传递给 PtVisible 函数,确定图形输出是否显示在区域的边框内。
- 通过调用 RectVisible 函数确定工作区的一部分是否与区域相交。
- 通过调用 OffsetClipRgn 函数按指定偏移量移动现有区域。
- 通过调用 ExcludeClipRect 函数,从当前裁剪区域中排除工作区的矩形部分。
- 通过调用 IntersectClipRect 函数,将工作区的矩形部分与当前裁剪区域合并。
需要句柄的操作,比如:
- 通过调用 CombineRgn 函数来合并区域。
- 通过调用 EqualRgn 函数来比较区域。
- 通过调用 PtInRegion 函数来检测某个点是否位于裁剪区域内。
3.1.2 裁剪路径
-
与裁剪区域一样,裁剪路径是应用程序可以在设备上下文中选择的另一个图形对象。 与剪裁区域不同,裁剪路径始终由应用程序创建,并用于剪裁到一个或多个不规则形状。
-
若要创建裁剪路径,首先需要创建描述所需的不规则形状的路径。通过在调用 BeginPath 和 EndPath 函数之间,调用适当的 GDI 绘制函数来从创建路径。创建路径后,可以通过调用 SelectClipPath 函数来将其转换为裁剪路径。在转换时还需通过使用模式来指定如何将新裁剪路径与设备上下文的原始裁剪区域组合在一起。下表列举了使用模式:
模式 描述 RGN_AND 裁剪路径包括设备上下文的裁剪区域和当前路径的交集(重叠区域)。 RGN_COPY 裁剪路径为当前路径。 RGN_DIFF 裁剪路径包括设备上下文的裁剪区域,并排除当前路径的任何相交部分。 RGN_OR 裁剪路径包括设备上下文的裁剪区域和当前路径的并集(组合区域)。 RGN_XOR 裁剪路径包括设备上下文的裁剪区域和当前路径的并集,但不包括交集。
3.2 使用剪裁
- 有关详细信息,请参阅使用剪裁。
3.3 剪裁参考
3.3.1 剪裁函数
- 有关详细信息,请参阅剪裁函数。