1、 1创建画笔当用户创建一个用于绘图的设备环境对象时,系统自动将一个像素单位宽度的实黑线的画笔作为默认画笔。如果用户欲使用其他性质的画笔,首先就要创建该画笔。创建画笔可以采用两种方法。一种方法是通过调用画笔 Cpen 类的一个带参构造函数来构造一个 Cpen 类画笔对象。Cpen Pen(int nPenStyle,int nWidth,COLORREF rgbColor)其中第一个参数用于指定画笔样式;第二个参数用于指定画笔宽度;第三个参数用于指定画笔颜色。画笔的样式说明参考表 3.3;画笔的颜色可以通过 Windows 提供的 GRB 宏来设置,其使用格式为:RGB(nRed,nGreen,
2、nBlue)参数 nRed、nGreen、nBlue 分别表示红、绿、蓝分量值,数值范围为 0255。如RGB(0,0,0)表示黑色;RGB(255,0,0)表示红色。表 3.4 列出了常用颜色的 RGB 值。表 3.3 画笔的样式说明样 式 说 明PS_SOLID 实线PS_DOT 点线PS_DASH 虚线PS_DASHDOT 点划线PS_DASHDOTDOT 双点划线PS_NULL 空的边框PS_INSIDEFRAME 边框实验注:各种虚线只有当线宽为 1 时才有效。表 3.4 常用颜色的 RGB 值颜 色 RGB 分量值 颜 色 RGB 分量值浅红 2550 0 深红 1280 0浅绿
3、0 2550 深绿 0 1280浅蓝 0 0 255深蓝 0 0 128浅黄 2552550 深黄 1281280浅青 0 255255深青 0 128128紫色 2550 255灰色 192192192白色 255255255黑色 0 0 0下面的代码创建了一个蓝色实线画笔:CPen Pen(PS_SOLID,1,RGB(0,0,255);创建画笔的另一个方法是首先声明一个 CPen 对象,然后调用 CPen 类的成员函数CreatePen()创建特定的画笔。CPen Pen;Pen.CretePen(int nPenStyle,int nWidth,COLORREF rgbColor);如
4、下代码同样创建一个蓝色实线画笔:CPen PenNew;PenNew.CreatePen(PS_SOLID,1,RGB(0,0,255);当需要多次改变画笔的属性时,多采用这种方法。 2选择创建的画笔到设备环境中创建画笔后,必须调用成员函数 CDC:SelectObject()将创建的画笔选入设备环境对象中。如果选择成功,函数 SelectObject()将返回原来画笔对象的指针。一般情况下,在选择新的画笔时应该保存原来的画笔对象,以备恢复。代码如下:CPen *pPenOld;pPenOld=pDC-SelectObject( 3删除画笔创建和选择画笔后,就可以使用该画笔对象进行绘图了。绘图
5、完成后,为了及时释放内存资源,应该调用成员函数 CDC:SelectObject()恢复以前保存的画笔对象;调用成员函数 CgdiObject:DeleteObject()删除当前画笔对象。代码如下:pDC-SelectObject(pPenOld);PenNew.DeleteObject();成员函数 DeleteObject()用于删除底层的 GDI 对象,如果因为不慎,删除一个设备环境对象正在使用的 GDI 对象,将会引起应用程序的运行异常。 1.创建画刷画刷有三种基本类型:纯色画刷、阴影画刷和图案画刷。创建画刷的一种方法是通过调用 CBrush 类三个不同的构造函数创建这三种类型的画刷
6、。创建纯色画刷:CBrush brush(RGBColor);此构造函数的参数指定纯色画刷的颜色。如下创建一个红色画刷:CBrush brush(RGB(255,0,0);创建阴影画刷:CBrush brush(BrushStyle,RGBColor);此构造函数的第一个参数指定画刷的样式,第二个参数指定颜色,画刷样式参见例3.2。如下创建一个交叉的绿色阴影画刷:CBrush brush2(HS_CROSS,RGB(0,255,0);创建图案画刷:CBrush brush(此构造函数的参数指定画刷所使用的位图,该位图必须先装入内存中。创建画刷的另一个方法,也可以先声明一个 CBrush 类画刷
7、对象,然后调用初始化成员函数创建特定的画刷。常见的成员函数有:CreateSolidBrush() 创建纯色画刷CreateHatchBrush() 创建阴影画刷CreatePatternBrush() 创建图案画刷下面代码同样创建一个交叉的绿色阴影画刷。CBrush BrushNew;BrushNew.CreateHatchBrush(HS_CROSS,RGB(0,255,0); 2. 选择画刷创建画刷后,同样必须调用成员函数 CDC:SelectObject()将创建的画刷选入设备环境对象中,同时保存以前的画刷。CBrush *pBrushOld;pBrushOld=pDC-SelectO
8、bject( 3.删除画刷同样为了释放资源,在使用完成画刷对象后,也要及时删除画刷对象,恢复原来的画刷对象。 1文字信息显示文字信息显示的成员函数为:BOOL TextOut(int x,int y,LPCTSTR lpszString);在指定坐标(x,y)处显示字符串 lpszString 的内容,显示成功返回非 0,否则返回 0。 2画点画点的成员函数为:COLORREF SetPixel(int x,int y,COLORREF color);COLORREF SetPixel(POINT point,COLORREF color);该函数在指定坐标(用参数 x,y 或 point 给
9、出)处按给定颜色(color)画点,返回值为原来此坐标颜色。 3取指定坐标点的颜色取指定坐标点的颜色的成员函数为:COLORREF GetPixel(int x,int y) const;COLORREF GetPixel(POINT point) const;返回值为指定坐标处的颜色。 4画线画线工作需经两步完成:首先确定线的起始端位置,这可通过调用成员函数 MoveTo完成, 其原型为:Cpoint MoveTo(int x,int y);Cpoint MoveTo(POINT point);MoveTo 将绘图位置移至指定坐标处,并返回移动前的绘图位置。确定了线的起点后,即可使用成员函数
10、 LineTo 画线:BOOL LineTo(int x,int y);BOOL LineTo(POINT point);其参数为线终点的坐标。 5绘制矩形绘制矩形的成员函数为:BOOL Rectangle(int x1,int y1,int x2,int y2);BOOL Rectangle(LPCRECT lpRect);其参数为需要绘制的矩形的左上角坐标(x1,y1)和右下角坐标(x2,y2)。 6绘制椭圆绘制椭圆的成员函数为:BOOL Ellipse(int x1,int y1,int x2,int y2);BOOL Ellipse(LPCRECT lpRect);其参数的含义为所绘椭
11、圆的包含矩形的左上角和右下角坐标。 7画多边形画多边形的成员函数为:BOOL Polygon(LPPOINT lpPoints,int nCount);其中参数 lpPoints 为一 LPPOINT 类型的指针,可用 CPoint 数组(存放多边形的各顶点坐标)作为实参。参数 nCount 为顶点个数。例如:CPaintDC dc(this);CPoint pointPoly3;pointPoly0=CPoint(100,100);pointPoly1=CPoint(200,100);pointPoly2=CPoint(200,200);dc.Polygon(pointPoly,3);在窗口客户区相应位置画出一个三角形。 8获取客户区的坐标为了某些绘图效果,可能需要知道框架窗口客户区当前的大小。可通过 Wnd 类的成员函数 GetClientRect()实现,其调用方法为:void GetClientRect(LPRECT lpRect); 9其他绘图函数其他绘图函数还有画弧 Arc()、画弓形 Chord()、画扇形 Pie()、画圆角矩形 InvertRect()等,具体使用方法可参看 MSDN 联机帮助。