CPen类

CPen画笔是一种用来画线及绘制有形边框的工具,用户可以指定它的颜色及厚度,并且可以指定它画实线、点线或虚线。

CPen类,该类封装了Windows图形设备接口(GDI)画笔,主要通过构造函数来创建绘图对象。

1构造CPen对象

该类共重载了3个构造函数,下面分别进行详细说明

CPen();

CPen(int nPenStyle,int nWidth,COLORREF crColor);

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

第一个构造函数不带任何参数,由于它所构造的只是一个未初始化的CPen对象。

第二个构造函数带有3个参数,分别对画笔的线形,线宽和颜色进行了初始化。

参数nPenStyle指定画笔的风格(样式),也就是画笔的线形。

参数nPenStyle的值
参数值 注释
PS_SOLID 创建一个实线画笔
PS_DASH 创建一个虚线画笔,该值只有当画笔宽度小于1个设备单位或更小时才有效
PS_DOT 同上
PS_DASHDOT 同上
PS_DASHDOTDOT 创建一个双点线画笔,该值只有当画笔宽度小于1个设备单位或更小时才有效
PS_NULL 创建一个空线画笔
PS_INSIDEFRAME 创建一个内框线画笔,该画笔可以在Windows GDI输出函数定义的矩形边界所生成的封闭状的边框内绘制直线

参数crColor:包含了一个画笔所具有的RGB颜色

第三个构造函数带有5个参数,下面分别加以介绍:

参数nPenStyle:功能同上,除了具有上一个构造函数中介绍的参数值外,还增加了如下的参数值。

新增的nPenStyle参数值


参数值 注释
PS_GEOMETRIC 创建一个几何画笔
PS_COSMETIC 创建一个装饰画笔
PS_ALTERNATE 创建一个设置其他像素的画笔。(该风格只对装饰画笔可用)
PS_USERSTYLE 创建一个使用由用户提供的风格矩阵的画笔
PS_ENDCAP_ROUND 端点为圆形的
PS_ENDCAP_SQUARE 端点为方形的
PS_ENDCAP_FLAT 端点为平坦的
PS_JOIN_BEVEL 成尖角连接
PS_JOIN_MITER 通过SetMiterLimit函数设置的当前极限值范围内斜接;否则,成尖角连接。
PS_JOIN_ROUND 成圆角连接。




参数nWidth:含义基本与上一构造函数的同一参数含义相同,区别在于如果参数nPenStyle的值为PS_GEOMETRIC,那么该参数值是针对逻辑单位而言的,并且该参数值恒为1

参数pLogBrush:指向一个LOGBRUSH结构。该结构原型声明如下:

typedef struct tagLOGBURSH{

UINT lbStyle;

COLORREF lbColor;

LONG lbHatch;

}LOGBRUSH;

该结构体定义了一个画刷的风格,颜色和限影线种类。lbStyle的值如下表

画刷的风格值

    
参数值 说明
BS_DIBPATTERN 由设备无关的位图(DIB)定义的图形画刷。如果该参数值为该值,则成员lbHatch包含了一个被压缩的DIB的句柄
BS_DIBPATTERNPT 由设备无关的位图(DIB)定义的图形画刷。如果该参数值为该值,则成员lbHatch包含了一个被压缩的DIB的指针
BS_HATCHED 阴影线画刷
BS_HOLLOW 中空画刷
BS_NULL 与参数值为BS_HOLLOW定义相同的画刷
BS_PATTERN 由内存位图定义的图形画刷
BS_SOLID 实画刷

成员lbColor指定了所指定画刷的颜色。

成员lbHatch指定了阴影线画刷的阴影线的样式。

如果参数nPenStyle的值为PS_COSMETIC,那么LOGBRUSH结构的成员变量lbColor指定画笔的颜色,成员变量lbStyle必须被为BS_SOLID.如果参数nPenStyle的值为PS_GEOMETRIC,那么所有的成员变量必须被有来指定画笔的刷子属性。

参数nStyleCount:以双字为一个单元指定lpStyle矩阵的长度。如果参数nPenStyle的值不是PS_USRSTYLE,则该参数值必为0

参数lpStyle:指向一个双字为单元的矩阵。第一个值以用户定义的风格指定了第一个直线段的长度。第二个值指定了第一个空隙的长度等。如果参数nPenStyle的值不是PS_USERSTYLE,那么这个指针必为空

1.3.1.2初始化CPen对象

下面介绍另外几种方法来创建和初始化画笔对象

调用CreatePen成员函数

CreatePen()成员函数通过指定线形、线宽和颜色等画笔属性参数直接创建一个具有特定线形、线宽和颜色的画笔对象,其原型声明如下:

BOOL CreatePen(int nPenStyle,int nWidth,COLORREF crColor);

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

所有参数的含义与上面介绍的一样

调用CreatePenIndirect()成员函数

CreatePenIndirect()成员函数创建画笔对象,其属性并不是直接通过函数参数的形式给出的,而是通过LOGPEN结构的成员变量间接的给出。为了创建一个具有特定属性的画笔对象主要工作是重置LOGPEN结构的成员变量,该函数的原型声明如下:

BOOL CreatePenIndirect(LPLOGPEN lpLogPen);

参数lpLogPen是指向LOGPEN结构的指针,在该结构中有3个成员变量,分别用于指定画笔的风格、宽度和颜色。LOGPEN结构的具体定义如下:

typedef  struct tagLOGPEN{

UINT lopnStyle;

POINT lopnWidth;

COLORREF lopnColor;

}LOGPEN;

第二个成员变量lopnWidth虽然也是用于指定画笔的宽度,但其类型却是POINT结构,在该结构中的y成员变量不起任何作用,只采用x成员变量来表示画笔宽度。

在实际使用中,既可以使用CreatePenIndirect()函数来创建画笔对象,也可以使用CreatePen()函数来创建,其实这两个函数是可互换的。

CPen类_第1张图片CPen类_第2张图片

CPen类_第3张图片CPen类_第4张图片

CPen类_第5张图片CPen类_第6张图片

这里使用了32位的COLORREF类型值来确定图形颜色值,其结构为0x00bbggrr,

各部分的数值分别说明如下:

bb代表蓝色值,范围从00到FF

gg代表绿色值,范围从00到FF

rr  代表红色值,范围从00到FF

同时我们还可以使用RGB宏来完成相同的功能,使用方法说明如下:

RGB(short red,short green,short blue)

red代表红色值,范围从0到255

green代表绿色值,范围从0到255

blue代表蓝色值,范围从0到255


复制 搜索

你可能感兴趣的:(CPen类)