
Rectangle()函数用来画矩形,其变量原型说明如下: int nRightRect, int nBottomRect); BOOL CDC:: Rectangle(int nLeftRect, int nTopRect, 其中,参数 nLeftRect 和 nTopRect 给出了圆形左上角的坐标,而 nRightRect 和 nBottomRect 则给出矩形的右下角坐标。 Ellipse()函数的作用则是画椭圆形。 Ellipse()函数中, 在 椭圆是由其外接圆形来确认的, 外接圆形的中心与圆弧中心重叠,矩形的长与宽和半圆的厚薄轴相同。函数表明如下: int nRightRect, int nBottomRect); BOOL CDC:: Ellipse(int nLeftRect, int nTopRect, 其中的参数表明与 Rectangle()函数同样。 RoundRect()函数用来画圆角方形,其函数的原型说明如下: int nWidth, int nHeight); int nRightRect, int nBottomRect, BOOL CDC:: RoundRect(int nLeftRect, int nTopRect, 其中的前四个参数与 Rectangle()函数同样,nWidth 表示圆角的长度, nHeight 表示圆角 的高度。
Polygon()函数用来画封闭的任意多边形,其变量原型说明如下: BOOL CDC:: Polygon((COUST POINT *lpPoints, int cCount); 其中的参数表明与 Polyline()函数同样。但两个函数有差别,Polygon()函数会手动将起 点和终点相连形成封闭的多边形,而 Polyline()函数则画出多条折线,只有当最终一点与起 点相似时才画出封闭的多边形。 示例,绘制圆形、圆角矩形、椭圆和六边形,程序如下: //绘制圆形、圆角矩形、椭圆和六边形 pDC->Rectangle(190,270,250,310); pDC->RoundRect(265,270,330,310,30,20); pDC->Ellipse(260-50,200-30,260+50,200+30);POINT polygonPts[3]={{390,160},{430,220},{350,210}}; pDC->Polygon(polygonPts,3); (5) 画笔与画刷(1)画笔 当勾画图形时,线条的属性,包括形状、宽度、样式等都是由画笔来确定的。
程序员 可以构建画笔,定义画笔的属性,从而画出多彩的图形。 创建画笔包括 CreatePen()和 CreatePenIndirect()两个函数。 MFC 将这种函数封装在 CPen 类中,这样画笔就无法被视为对象进行处理。下面介绍建立画笔的方式。 方法一:直接构造一个 CPen 对象,并将定义画笔的参数传给它,例如: CPen pen(PS-SOLID,1,RGB(255,0,0)); 创建一个宽度为一个像素、实线和白色的画笔。 方法二: 首先声明一个没有初始化的 CPen 类对象, 然后再用 CreatePen()函数定义画笔 的属性。例如, CPen Pen; Pen->CreatePen (PS-SOLID,1,RGB(255,0,0)); 方法三:先声明一个 CPen 类对象和一个描述画笔结构的 LOGPEN 类对象,并填入画 笔的属性值,然后读取 CreatePenIndirect()函数来创建画笔。如下所示: CPen Pen; LOGPEN LogPen; LogPen.lopnStyle=PS_SOLID; LogPen.lopnWidth=1; LogPen.lpenColor=RGB(255,0,0); Pen.CreatePenIndirect(&LogPen); 如果画笔被失败创建,那么两个函数返回 TRUE,否则返回 FALSE。
画笔包括形状、宽度和色彩三个属性。表 3.2 列出了 GDI 画笔的颜色。 表 3.2 GDI 画笔的颜色 样式 说 明 PS_SOLID创建实线笔 PS_DASH 创建虚线笔,只有当画笔宽度大于或等于 1 时有效 PS_DOT 创建点线笔,只有当画笔宽度大于或等于 1 时有效 PS_DASHDOT 点划线笔,只有当画笔宽度大于或等于 1 时有效 PS_DASHDOTDOT 双点划线笔,只有当画笔宽度大于或等于 1 时有效 PS_NULL 创建 NULL 笔,不绘制任何图形 PS_INSIDEFRAME 创建可以在封闭框架内部勾勒直线的笔触。 画笔的厚度用像素个数来确定。PS_DASH、PS_DOT、PS_DASHDOT 和 PS_DASHDOTDOT 参数要求画笔尺寸只能为 1,其它参数可以构建任意长度的画笔。画笔 的色彩是一个 24 位的 RGB 颜色, RGB(rColor,gColor,bColor)来定义, 由 三个参数取值 0~255。 Windows 预定义了三个实线、1 个像素宽的画笔,它们是 WHITE_PEN、BLACK_PEN 和 NULL_PEN,程序中可以直接使用这种画笔,方法如下: CPen Pen; Pen.CreateStockObject(WHITE_PEN); 示例:在屏幕上绘制三组直线,第一组按不同线型绘制,第二组按不同宽度绘制,第 三组按不同颜色绘制。

程序如下: //画笔的式样、宽度和色彩 int i1; int nPenStyle[]= { PS_SOLID,PS_DASH,PS_DOT,PS_DASHDOT,PS_DASHDOTDOT,PS_NULL, PS_INSIDEFRAME, }; CPen *pNewPen;CPen *pOldPen; //用不同样式的画笔 for (i1=0;i1<7;i1++) { //构造新笔 pNewPen=new CPen; if (pNewPen->CreatePen(nPenStyle[i1],1,RGB(0,0,0))) { pOldPen=pDC->SelectObject(pNewPen); //选择新笔,并保存旧笔 //画直线 pDC->MoveTo(20,60+i1*20); pDC->LineTo(160,60+i1*20); //恢复原有的笔 pDC->SelectObject(pOldPen); } else { //出错提示 AfxMessageBox("CreatePen Erroe!!"); } //删除新笔 delete pNewPen; } //用不同的尺寸的笔绘图 for(i1=0;i1<7;i1++) { //构造新笔 pNewPen=new CPen; if (pNewPen->CreatePen(PS_SOLID,i1+1,RGB(0,0,0))) {pOldPen=pDC->SelectObject(pNewPen); //画直线 pDC->MoveTo(200,60+i1*20); pDC->LineTo(340,60+i1*20); //恢复原有的笔 pDC->SelectObject(pOldPen); } else { //出错提示 AfxMessageBox("CreatePen Erroe!!"); } //删除新笔 delete pNewPen; } //设置颜色表 struct tagColor { int r,g,b; } color[7]= { {255,0,0},{0,255,0},{0,0,255}, {255,255,0},{255,0,255},{0,255,255},{0,0,0}, }; //用不同颜色绘图 for(i1=0;i1<7;i1++) { //构造新笔 pNewPen=new CPen; if (pNewPen->CreatePen(PS_SOLID,2,RGB(color[i1].r,color[i1].g,color[i1].b))){ pOldPen=pDC->SelectObject(pNewPen); //画直线 pDC->MoveTo(380,60+i1*20); pDC->LineTo(520,60+i1*20); //恢复原有的笔 pDC->SelectObject(pOldPen); } else { //出错提示 AfxMessageBox("CreatePen Erroe!!"); } //删除新笔 delete pNewPen; } //画笔程序结束 (2)画刷 在进行区域填充或勾画封闭图形时,需要用到画刷。
MFC 把 GDI 画刷封装在 CBrush 类中。画刷分三种基本种类:纯色画刷、阴影画刷和形状画刷。 纯色画刷绘图使用彩色来定义,颜色由 RGB()函数来确定。纯色画刷可以采取直接声 明的方式,例如: CBrush Brush(RGB(255,0,0)); 创建一个红色画刷。 也可以采取分步原则,由 CreateSolidBrush()函数创建。 CBrush Brush; Brush->Create->CreateSolidBrush(RGB(255,0,0)); Windows 预定义了七种画刷,包括:BLACK_BRUSH、DKGRAY_BRUSH、 GRAY_BRUSH、 LTGRAY_BRUSH、 HOLLOW_BRUSH、 NULL_BRUSH 和 WHITE_BRUSH。 可以参照 CPen 类的方式,采用 CreateStockObject()来使用预定义的画刷。 阴影画刷使用预定义的六种阴影颜色进行绘图。表 3.3 列出了六种阴影颜色。表 3.3 六种阴影颜色 阴影风格 说明 HS_BDIAGONAL 45 度向上阴影线(从左到右) HS_CROSS 水平线与平行线交叉阴影 HS_DIAGCROSS 45 度方向的交叉阴影线 HS_FDIAGONAL 45 度向下阴影线(从左到右) HS_HORIZONTAL 水平阴影线 HS_VERTICAL 垂直阴影线 创建阴影画刷的方式与拼接画刷的构建方式相同, 例如建立一个 45 度方向的交叉阴影 线的画刷,方法如下: CBrush Brush(HS_DIAGCROSS,RGB(255,0,0)); 或者 CBrush Brush; Brush->CreateHatchBrush(HS_DIAGCROSS,RGB(255,0,0)); 函数中有两个参数,第一个参数是画刷的阴影颜色,第二个参数是阴影线的色彩。
示例:绘制缺省画刷的圆形,纯色画刷矩形和描绘 100 单位的圆形,并且用黑色 45 度 交叉线阴影将其填充,程序如下: //画刷程序 pDC->Rectangle(300,300,400,400); //缺省的画刷,白色 //纯色画刷 CBrush *pNewBrush1; CBrush *pOldBrush1; pNewBrush1=new CBrush;if (pNewBrush1->CreateSolidBrush(RGB(255,0,0))) { //选择新画刷 pOldBrush1=pDC->SelectObject(pNewBrush1); //绘制矩形 pDC->Rectangle(200,200,300,400); //恢复原有画刷 pDC->SelectObject(pOldBrush1); } delete pNewBrush1; //阴影画刷 CBrush Brush(HS_DIAGCROSS,RGB(255,255,255)); CBrush *pOldBrush; pOldBrush=pDC->SelectObject(&Brush); pDC->SetBkColor(RGB(192,192,192)); pDC->Rectangle(0,0,100,100); pDC->SelectObject(pOldBrush);1: combo box 控件的使用1.你在编辑状态下点哪个控件的向上的三角形,就出冒起来一个可以调高度的东东。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/ruanjian/article-128622-2.html
现在又上市