CPen::CPen

CPen();
CPen( int nPenStyle, int nWidth, COLORREF crColor );
  throw( CResourceException );
CPen( int nPenStyle, int nWidth , const LOGBRUSH* pLogBrush, int nStyleCount = 0, const DWORD* lpStyle = NULL );
  throw( CResourceException );

参数:
nPenStyle指定画笔的风格。 在构造函数的第一个版本中,此参数可以取下列值之一:
PS_SOLID创建一支实线画笔。
PS_DASH创建一支虚线画笔。只有当画笔宽度为1或更小(以设备单位计算)时才有效。
PS_DOT创建一支点线画笔。只有当画笔宽度为1或更小(以设备单位计算)时才有效。
PS_DASHDOT创建一支虚线和点交替的画笔。只有当画笔宽度为1或更小(以设备单位计算)时才有效。
PS_DASHDOTDOT创建一支虚线和两点交替的画笔。只有当画笔宽度为1或更小(以设备单位计算)时才有效。
PS_NULL创建一支空画笔。
PS_INSIDEFRAME创建一支画笔,该画笔在Windows GDI输出函数所产生的封闭形状的框架内画线,此输出函数指定一个限定矩形(例如,Ellipse,Rectangle,RoundRect,Pie和Chord成员函数),当此风格用于没有指定限定矩形的Windows GDI输出函数(例如LineTo成员函数)时,此画笔的绘制区域不受框架的限制。

第二种版本的CPen构造器指明了类型、风格、尾帽和连接等属性组合。来自每个类别的值应使用位操作符(|)组合起来。
笔的风格可以是下列之一:
PS_GEOMETRIC创建一支几何画笔。
PS_COSMETIC创建一支装饰画笔。CPen构造函数的第二个版本为nPenStyle添加了下列一些画笔风格:
PS_ALTERNATE创建一支交替设置像素的画笔(此风格只用于装饰画笔)。
PS_USERSTYLE创建一支使用用户提供的风格数组的画笔。

尾帽可以是下列值之一:
PS_ENDCAP_ROUND尾帽是圆的。
PS_ENDCAP_SQUARE尾帽是方的。
PS_ENDCAP_FLAT尾帽是平面的。

连接可以是下列值之一:
PS_JOIN_BEVEL连接是斜截式的。
PS_JOIN_MITER当连接在::SetMiterLimit函数所设置的当前限制之内时,连接是斜接式的。如果连接超出这个限制则成为斜截式的。
PS_JOIN_ROUND连接是圆的。

nWidth指定画笔的宽度。
·对于构造函数的第一个版本来说,如果这个值是0,则不管是什么映射方式,以设备单位计算的宽度总是一个像素。
·对于构造函数的第二个版本来说,如果nPenStyle是PS_GEOMETRIC,则宽度以逻辑单位给出。如果nPenStyle是PS_COSMETIC,则宽度必须设置为1。

crColor包含了画笔的RGB值。
pLogBrush指向一个LOGBRUSH结构。如果nPenStyle是PS_COSMETIC,则此LOGBRUSH结构的lbColor成员指定画笔的颜色,此LOGBRUSH结构的lbStyle成员必须设置为BS_SOLID。如果nPenStyle为PS_GEOMETRIC,则此结构的所有成员都必须用于指定画笔画刷属性。
nStyleCount指定lpStyle数组的长度(以双字为单位)。如果nPenStyle不是PS_USERSTYLE,这个值必须是零。
lpStyle指向一个双字值的数组。第一个值指定一个用户定义的风格中第一段虚线的长度,第二个值指定第一段空白的长度,如此等等。如果nPenStyle不是PS_USERSTYLE,则这个指针必须为NULL。

说明:
如果你使用的是没有参数的构造函数,你就必须用CreatePen,CreatePenIndirect或CreateStockObject成员函数来初始化所生成的CPen对象。如果你使用的是带参数的构造函数,则不再需要进一步的初始化。如果有错误发生,则带参数的构造函数可能会抛出一个异常,但是不带参数的构造函数则总是会成功。

请参阅:
CPen::CreatePen, CPen::CreatePenIndirect, CGdiObject::CreateStockObject