特殊说明:版权归个人所有,请勿转载,谢谢合作。
Windows绘图操作使用画笔与画刷,画笔的作用是绘制直线与曲线,画刷的作用是区域填充。在Windows系统中,可以有多种不同的画笔与画刷,但在当前图形的绘制过程中,只能有一种有效,这就需要在使用时将相应的画笔与画刷“选入对象”,并设置到设备描述表中。一旦设备描述表选定了一个绘图对象,该对象将一直被使用,直到被修改为止。
5.2.1 画笔
画笔用于绘制线条和轮廓,具有颜色、线型等。画笔句柄的数据类型为HPEN,画笔并不是定义之后直接使用,而是需要经过一个过程,其创建步骤如下:
(1)创建画笔;
(2)选入画笔;
(3)绘图;
(4)选出画笔;
(5)删除画笔。
创建画笔,使用CreatePen函数来返回画笔的句柄。CreatePen函数原型如下:
HPEN CreatePen( int fnPenStyle, // pen style int nWidth, // pen width COLORREF crColor // pen color );
参数fnPenStyle,指定画笔样式。画笔的样式有很多种,分别用来绘制不同形式的线条,如实线、虚线等。绘制样式可以是表5.3中描述常数之一。
- 表5.1 画笔样式
样式 | 描述 |
PS_SOLID | 画笔为实线 |
PS_DASH | 画笔为虚线 |
PS_DOT | 画笔为点 |
PS_DASHDOT | 画笔为点划线 |
PS_DASHDOTDOT | 画笔为双点划线 |
PS_NULL | 画笔为不可见 |
PS_INSIDEFRAME | 画笔在由椭圆、矩形、圆角矩形、饼图以及弦等生成的封闭对象框中画图 |
参数nWidth,以逻辑单位表示的画笔的宽度。
参数crColor,画笔的RGB颜色。RGB颜色通过三元色来设定内容,格式为:RGB(红,绿,蓝)。红、绿、蓝处,可以使用0~255的数字来表示,分别代表所处的颜色的深度,从而来描述大千世界的各种颜色。下例为创建3像素实线画笔,颜色为红色:
HPEN hPen= CreatePen( PS_SOLID,3,RGB(255,0,0));
选入画笔,使用SelectObject函数,该函数选择对象到指定的设备上下文环境中,并通过函数返回值来保存系统的画笔对象。函数原型如下:
HGDIOBJ SelectObject( HDC hdc, // handle to device context HGDIOBJ hgdiobj // handle to object );
第一个参数hdc为设备上下文环境的句柄,第二个参数hgdiobj为被选择的对象的句柄。SelectObject函数是一个多态函数,也就是说它可以使用不同的句柄类型,这是因为所有的图形对象句柄都是数据类型HGDIOBJ(GDI对象句柄)的子类。该函数选入的对象句柄可为:位图、画刷、字体、画笔以及区域几种。因为这几类对象为HGDIOBJ的子类,所以在使用时需要进行强制类型转换。此函数在选入对象后,会将系统之前使用的对象返回回来,所以需要将此对象进行保存。在绘画完成后,反还给系统。
绘画,为根据画笔所创建的风格,绘制相应的样式。
选出画笔,与选入画笔使用同一函数,将选入时返回(即函数返回值)的系统对象保存的内容,还原给系统。
删除画笔,使用DeleteObject函数删除一个位图、画刷、画笔、字体、区域或者调色板,释放所有与该对象有关的系统资源,在对象被删除之后,指定的句柄也将失效。
5.2.2 画刷
画刷用来填充任何闭合的对象,个有颜色、样式,当然也可以是位图。画刷句柄的数据类型为HBRUSH,画刷与画笔的创建过程基本相同,如下为画刷的创建步骤:
(1)创建画刷;
(2)选入画刷;
(3)绘图;
(4)选出画刷;
(5)删除画刷。
创建画刷,可以使用CreateSolidBrush和CreateHatchBrush函数来创建。CreateSolidBrush函数用来创建一个具有指定颜色的画刷,函数原型如下:
HBRUSH CreateSolidBrush( COLORREF crColor // brush color value );
参数crColor,为画刷的RGB颜色,与CreatePen函数crColor参数相同。下例创建绿色画刷:
HBRUSH hBrush = CreateSolidBrush(RGB(0,255,0));
CreateHatchBrush函数可以创建具有指定阴影图案和颜色的画刷,函数原型如下:
HBRUSH CreateHatchBrush( int fnStyle, // hatch style COLORREF clrref // color value );
参数fnStyle,为创建的阴影模式标识,该参数可以取值见表5.4所示。
- 表5.2 画刷的阴影模式
值 | 含义 |
HS_BDIAGONAL | 表示45度向上,从左至右的阴影(/////) |
HS_CROSS | 水平和垂直交叉阴影(+++++) |
HS_DIAGCROSS | 45度交叉阴影(XXXXX) |
HS_FDIAGONAL | 45度向下,自左至右阴影(\\\\\\) |
HS_HORIZONTAL | 水平阴影(—–) |
HS_VERTICAL | 垂直阴影(|||||) |
参数crColor,指定用于阴影刷子的前景色。
选入画刷,操作与选入画笔相同,这里不过多进行介绍。
绘画,根据画刷所创建的风格,绘制相应风格的图形。
选出画笔,与选入画笔使用同一函数,将选入时返回(即函数返回值)的系统对象保存的内容,还原给系统。
删除画笔,使用DeleteObject函数删除一个位图、画刷、画笔、字体、区域或者调色板,释放所有与该对象有关的系统资源,在对象被删除之后,指定的句柄也将失效。