前言:
学习笔记,随时更新。如有谬误,欢迎指正。
说明:
- 红色字体为较为重要部分。
- 绿色字体为个人理解部分。
原文链接:https://learn.microsoft.com/en-us/windows/win32/gdi/pens
14 笔
- 笔是一种图形工具,应用程序可以使用它来绘制直线和曲线。
14.1 关于笔
- 笔有两种:装饰笔和几何笔。
- 装饰笔用于需要固定宽度线条和快速绘制线条的应用。例如,一个 CAD 应用程序使用装饰笔生成宽度在 0.015 到 0.022 英寸之间的隐藏线、剖面线、中心线和尺寸线,而不考虑比例系数。
- 几何笔用于需要可伸缩线条的应用程序,具有独特的端点或连接样式的线条,以及比单个像素更宽的线条。例如,电子表格应用程序使用几何笔将条形图中的每个条形定义为一条宽线。
14.1.1 装饰笔
-
装饰笔的尺寸以设备单位指定。因此,用装饰笔画的线总是有一个固定的宽度。用装饰笔画的线通常比用几何笔画的线快 3 到 10 倍。装饰笔有三个属性:宽度、样式和颜色。有关这些属性的详细信息,请参见笔属性。
-
要创建装饰笔,请使用 CreatePen 、 CreatePenIndirect 或 ExtCreatePen 函数。要获取系统管理的三支预设装饰笔中的一支,请使用 GetStockObject 函数。
-
在创建一支笔(或获得一支现有笔的句柄)之后,使用 SelectObject 函数将该笔选择到应用程序的设备上下文( DC )中。从此时开始,应用程序将使用此笔在其客户区中进行任何绘制线条的操作。
14.1.2 几何笔
-
几何笔的尺寸是用逻辑单位指定的。因此,用几何笔绘制的线条可以缩放,也就是说,根据当前的世界变换,它们可能会显得更宽或更窄。有关世界变换的更多信息,请参见坐标空间和变换。
-
除了与装饰笔共享的三个属性(宽度、样式和颜色)外,几何笔还具有以下四个属性:图案、可选的阴影、端点样式和连接样式。有关这些属性的详细信息,请参见笔属性。
-
要创建几何笔,应用程序可以使用 ExtCreatePen 函数。与装饰笔一样, SelectObject 函数将几何笔选择到应用程序的 DC 中。
14.1.3 笔属性
- 有七个笔属性定义笔的类型及其特征:宽度、样式、颜色、图案、阴影、端点样式和连接样式。装饰笔和几何笔都有宽度、样式和颜色属性。只有几何笔具有图案、阴影、端点样式和连接样式属性。图案和可选阴影属性通常与画刷关联,但也可以与几何笔一起使用。
14.1.3.1 笔宽度
-
宽度属性以设备单位来指定装饰笔的宽度。但是,当与几何笔一起使用时,它以逻辑单位指定笔的宽度。有关设备单位的详细信息,请参见坐标空间和转换。
-
目前,系统将装饰笔的宽度限制在单个像素;但是,未来的版本可能会删除此限制。
14.1.3.2 笔样式
-
样式属性指定使用特定装饰笔或几何笔时显示的线条模式。
-
有 8 种预定义的笔样式。前 7 种分别是: Solid 、 Dash 、 Dot 、Dash-dot 、 Dash-dot-dot 、 Null 、Inside-frame ,示意图见笔样式。
Inside-frame 样式与装饰笔的 Solid 样式相同。然而,当与几何笔一起使用时,它的操作就不同了。如果几何笔的宽度大于单个像素,并且绘制函数使用该笔在填充对象周围绘制边界,则系统将在对象的框内绘制边界。通过使用 Inside-frame 样式,应用程序可以确保对象完全显示在指定的尺寸内,而不考虑几何笔的宽度。
-
除了系统定义的 7 种样式之外,还有用户(或应用程序)定义的第 8 种样式。用户定义的样式用一系列自定义的破折号和点生成线条。
-
使用 CreatePen 、 CreatePenIndirect 或 ExtCreatePen 函数创建具有系统定义样式的笔。使用 ExtCreatePen 函数创建自定义样式的笔。
14.1.3.3 笔颜色
- 颜色属性指定笔的颜色。应用程序可以通过使用 RGB 宏在 COLORREF 结构体中存储指定所需颜色的红、绿、蓝三色元组,并将该结构体的地址传递给 CreatePen 、 CreatePenIndirect 或 ExtCreatePen 函数,从而创建具有唯一颜色的装饰笔。(预设笔仅限于黑色、白色和隐形笔。)有关 RGB 三色元组和颜色的详细信息,请参见颜色。
14.1.3.4 笔图案
- 图案属性指定几何笔的模式。创建一个画刷并将其句柄传递给 ExtCreatePen 函数来创建一个模式。
14.1.3.5 笔阴影
- 阴影属性使用阴影模式属性指定几何笔的阴影类型。有六种模式可用: Forward diagonal 、 Cross 、 Diagonal cross 、 Backward diagonal 、 Horizontal 和 Vertical ,示意图见笔阴影。
14.1.3.6 笔端点
- 端点属性指定几何笔如何绘制线的端点的形状:圆形、方形或平(不绘制)。使用每种类型的端点绘制的平行线的示意图见笔端点。
14.1.3.7 笔联接
- 联接属性指定如何连接两条几何线的两端:斜线、斜线或圆线。示意图详见笔联接。
14.1.4 已启用 ICM 的笔函数
-
尽管设备之间的成像技术和色彩功能存在差异, Microsoft 的图像颜色管理( Image Color Management, ICM )也能确保彩色图像、图形对象或文本对象在任何设备上的呈现尽可能接近其原始意图。在任何设备上, ICM 2.0 都有助于保持颜色的一致性和准确性。有关 ICM 的详细信息,请参阅 Windows 颜色系统。
-
以下笔函数启用了对 ICM 的支持: CreatePen 、 ExtCreatePen 。
14.2 使用笔
- 有关详细信息,请参阅使用笔。
14.3 笔参考
14.3.1 笔函数
- 有关详细信息,请参阅笔函数。
14.3.2 笔结构体
- 有关详细信息,请参阅笔结构体。