CPen::CreatePen

使用指定的样式、宽度和画笔属性创建一个逻辑化妆提供或几何形状钢笔,并将它附加到 CPen 对象。

BOOL CreatePen(
   int nPenStyle,
   int nWidth,
   COLORREF crColor 
);
BOOL CreatePen(
   int nPenStyle,
   int nWidth,
   const LOGBRUSH* pLogBrush,
   int nStyleCount = 0,
   const DWORD* lpStyle = NULL 
);

参数

  • nPenStyle
    为钢笔指定样式。有关可能值列表,请参见。CPen 构造函数的 nPenStyle 参数。

  • nWidth
    指定钢笔的宽度。

    • 对于 CreatePen的第一个版本,因此,如果该值为 0,无论该映射模式,如组件单位的宽度始终为 1 像素。

    • 对于 CreatePen的第二个版本,因此,如果 nPenStyle 是 PS_GEOMETRIC,该宽度 (以逻辑单位给定。如果 nPenStyle 是 PS_COSMETIC,必须将宽度为 1。

  • crColor
    包含钢笔的一个 RGB 颜色。

  • pLogBrush
    指向 LOGBRUSH 结构。如果 nPenStyle 是 PS_COSMETICLOGBRUSH 结构的 lbColor 成员指定钢笔的颜色,并 LOGBRUSH 结构的 lbStyle 成员必须设置为 BS_SOLID。如果 nPenStylePS_GEOMETRIC,所有成员必须使用指定钢笔的 brush 属性。

  • nStyleCount
    在双字单元测试指定该长度,lpStyle 数组。如果 nPenStyle 不是 PS_USERSTYLE,此值必须为零。

  • lpStyle
    指向双字值。第一个值在用户定义的样式指定第一个短划线的长度,第二个值指定第一个间距的长度,依此类推。如果 nPenStyle 不是 PS_USERSTYLE,该指针必须是 NULL

返回值

非零,如果成功或零,如果方法失败。

备注

CreatePen 的第一个版本初始化具有指定的样式、宽度和颜色的一个钢笔。钢笔可以以后选择作为将向当前钢笔为所有设备上下文。

其钢笔的宽度大于 1 像素应始终具有 PS_NULLPS_SOLIDPS_INSIDEFRAME 样式。

像素具有 PS_INSIDEFRAME 样式和在逻辑颜色表中没有匹配一种颜色的颜色,钢笔绘制带有仿色。PS_SOLID 钢笔样式不能用于将仿色创建钢笔。如果钢笔的宽度小于或等于 1.,该样式 PS_INSIDEFRAMEPS_SOLID 相同。

CreatePen 的第二个版本初始化具有指定的样式、宽度和画笔属性的一个逻辑化妆提供或几何形状钢笔。一个装饰性的钢笔的宽度始终为 1;一个几何图形钢笔的宽度世界上单元始终指定。在应用程序创建一个逻辑钢笔后,它可以选择笔绘制到设备上下文通过调用 CDC::SelectObject 功能。对笔选中到设备上下文后,它可用于绘制直线和曲线。

  • 如果 nPenStyle 是 PS_COSMETICPS_USERSTYLE,在 lpStyle 数组的项在样式的单元测试指定短划线的长度和空格。样式单元由笔可用于绘制直线的设备定义的。

  • 如果 nPenStyle 是 PS_GEOMETRICPS_USERSTYLE,在 lpStyle 数组的项在逻辑单位指定短划线的长度和空格。

  • 如果 nPenStyle 是 PS_ALTERNATE,样式单位将被忽略,并且其他像素设置。

当应用程序不再需要一个特定笔时,它应调用 CGdiObject::DeleteObject 成员函数或销毁 CPen 对象,因此该资源中不再使用。当钢笔在设备上下文时,已选择应用程序不应删除钢笔。

示例

CPen myPen1, myPen2;

// Create a solid red pen of width 2.
myPen1.CreatePen(PS_SOLID, 2, RGB(255,0,0));

// Create a geometric pen.
LOGBRUSH logBrush;
logBrush.lbStyle = BS_SOLID;
logBrush.lbColor = RGB(0,255,0);
myPen2.CreatePen(PS_DOT|PS_GEOMETRIC|PS_ENDCAP_ROUND, 2, &logBrush);   

要求

标头: afxwin.h

请参见

参考

CPen选件类

层次结构图

CPen::CreatePenIndirect

CPen::CPen

CGdiObject::DeleteObject

LOGBRUSH