画笔和画刷是GDI中两种重要的绘图工具。画笔用于绘制各种直线曲线,画刷用于填充封闭图形的内部区域。
绘图工具的使用包括创建GDI对象,选择GDI对象,使用GDI对象绘图和使用后释放GDI对象等步骤。
画笔
CPen类有三个构造函数。如果创建一个红色画笔。即一种是调用一个带参数的构造函数创建 一个画笔对象,另一种是首先构造一个没有初始化的画笔对象,然后调用CPen类的成员函数CreatePen()来创建定制的画笔。当画笔对象的声明与创建不在一个地方时(需要多次改变画笔的属性),需采用第二种方法 。三个参数分别制定画笔样式、画笔宽度、画笔颜色。应注意不同的画笔类型有不同的宽度限制。详见MSDN。
创建画笔对象后该画笔不会立即生效,需要调用SelectObject()将创建的画笔选入设备描述表中,如果选择成功,该函数将返回被替换的画笔对象。为了使用完成之后恢复设备环境原来的画笔,选择新的画笔时应该保存以前的画笔对象 。
绘图结束后应该通过调用CDCl类的成员函数SelectObject()恢复以前的画笔,并通过调用CGdiObject类的成员函数DeleteObject()释放GDI对象所占的内存资源。当创建的对象被销毁时,会自动删除底层的对象,否则需要调用函数完成删除工作。
当设备环境还在使用一个GDI对象时调用DelectObject()删除该对象,将引起错误。
画刷
画刷的构造函数有四种,其中三个为带参数的,另外一个是不带参数的。
三个带参数的:(举例)
CBrush brush1(RGb(255,0,0)); //创建纯色画刷
CBrush brush2(HS_DIAGCROSS,RGb(255,0,0)); //创建阴影画刷,共有六种阴影样式
CBrush brush3(&bmp);//创建图案画刷,制定画刷所使用的位图。
不带参数的构造函数:CBrush类提供了几种创建函数CreateSolidBrush,用指定的颜色创建一个纯色画刷, CreateHatchBrush,用指定的阴影样式和颜色创建一个阴影画刷, CreatePatternBrush,创建一个图案画刷,CreateSysColorBrush,使用系统默认的颜色创建一个指定阴影样式的画刷。
选择创建的画刷和使用结束后恢复原来的画刷的方法与画笔工具完全一样。
简单画刷的使用
成员函数FillRect利用指定的画刷填充一块指定的矩形区域,其构造函数中有两个参数,第一个参数是指向一个RECT结构体或CRect对象的指针,第二个参数是指向用于填充矩形的画刷对象的指针。
由于这里是用指定的画刷填充一块区域,,即函数体中提供了画刷,因此不需要将画刷选入设备描述表中。设备描述表中提供了一个默认的白色画刷 。
位图画刷:
上面对位图画刷的构造函数已经提过,他的参数需要一个CBitmap类型的指针,因此需要创建位图类对象 。CBitmap提供了多个初始化函数。其中LoadBitmap有两个构造函数,其中一种为以资源的ID地址作为参数。
创建资源略。