5.2 绘图工具

特殊说明:版权归个人所有,请勿转载,谢谢合作。

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函数删除一个位图、画刷、画笔、字体、区域或者调色板,释放所有与该对象有关的系统资源,在对象被删除之后,指定的句柄也将失效。

 

转载请附上原文出处链接及本声明
李老师的博客 » 5.2 绘图工具

发表评论

提供最优质的文章集合

立即查看 了解详情