首页 VISUAL C++ MFC编程XB

VISUAL C++ MFC编程XB

举报
开通vip

VISUAL C++ MFC编程XB本次课以VisualC++6.0为对象,主要介绍VisualC++集成编程环境的使用、图形设备接口和常用图形程序设计等基础,目的是通过对VisualC++的学习,掌握VisualC++图形程序设计的方法,为计算机图形学原理部分的算法实现提供程序工具和方法。VisualC++的集成开发环境从开始菜单中启动VisualC++6.0,进入开发集成环境。打开一个项目后,可以看到VisualC++6.0的开发环境由标题栏、工具栏、工作区窗口、源代码编辑窗口、输出窗口和状态栏组成,见下图所示。VisualC++提供了一种称为A...

VISUAL C++ MFC编程XB
本次课以VisualC++6.0为对象,主要介绍VisualC++集成编程环境的使用、图形设备接口和常用图形程序设计等基础,目的是通过对VisualC++的学习,掌握VisualC++图形程序设计的方法,为计算机图形学原理部分的算法实现提供程序工具和方法。VisualC++的集成开发环境从开始菜单中启动VisualC++6.0,进入开发集成环境。打开一个项目后,可以看到VisualC++6.0的开发环境由标题栏、工具栏、工作区窗口、源代码编辑窗口、输出窗口和状态栏组成,见下图所示。VisualC++提供了一种称为AppWizard的工具,利用该工具,用户可以方便地按照自己的需要创建符合需要的应用程序框架。在这个基础上,用户可以进一步将自己编写的程序加入到这个框架中,实现用户程序的功能。下面介绍建立VcApp应用程序框架的方法,其它应用程序的方法都与此类似。第一步:启动VisualC++,选择工程方法,项目类型选择MFCAppWizard(exe),输入工程的名字(如VcApp),选择项目放置的位置,然后单击“确定”按钮。第二步:设置应用程序的特性。这些设置包括六个问题,每一个问题都有不同的选项供选择。一个问题选择完后,通过“下一步”(Next)选择下一个问题,直到六个问题选择完毕。还可以通过“上一步”(Back)返回上一个问题重新选择。下面继续上面的例子,在单击“确定”按钮后,弹出第一个问题窗口,如下图所示。第二个问题是数据库的支持,是否用ODBC存取数据库选择是否对ActiveX的支持应用程序的特性和高级选项项目的风格、原文件注释和MFC库类型通知MFC产生的类名称AppWizard会把将要建立的新类的名称通知用户。AppWizard将为应用程序建立四个新类,CVcAppApp是应用程序类,它是CWinApp的派生类。CMainFrame是一个拥有应用程序主窗口的类。CVcAppDoc和CVcAppView是该应用程序的文档和视图类。这些名字用户可以改变。最后单击“完成”(Finish),显示所建项目的信息,单击“确定”后,项目建立完成。输入源程序进行程序设计应用程序项目工程建立以后,就为应用程序的开发建立了一个框架,这是不输入任何程序代码,对该项目程序进行编译和运行,可以生成一个完整的窗口程序。用户根据项目工程中的不同类,输入自己设计的程序代码,完成用户的程序设计。例如,从VcAppClasses中找到CVcAppView的OnDraw()函数,如图3-9所示。双击OnDraw()函数,这时系统会打开VcAppView.cpp文件,而且光标正置于OnDraw()函数中,在其中输入下列语句:pDC->TextOut(30,30,"同学们好,欢迎使用VC++编程!");编译并运行该程序,运行结果如下图所示。二.图形设备接口和图形程序设计在Windows系统中,程序都是通过一个叫做图形设备接口(GDI,GraphicsDeviceInterface)的抽象接口和硬件打交道,Windows会自动将设备环境 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 映射到相应的物理设备,并且会提供正确的输入/输出指令。GDI是Windows系统核心的三种动态链接库之一,它管理Windows系统的所有程序的图形输出。在Windows系统中,GDI向程序员提供了高层次的绘图函数,只要掌握这些绘图函数,就可以很方便地进行图形程序设计。另一个概念是设备描述表(DC,DeviceContext)。DC是一个数据结构,当程序向GDI设备中绘图时,需要访问该设备的DC。MFC将GDI的DC封装在C++类中,包括CDC类和CDC派生类,这些类中的许多成员都是对本地GDI绘图函数进行简单封装而形成的内联函数。DC的作用就是提供程序与物理设备或者虚拟设备之间的联系,除此之外,DC还要处理绘图属性的设置,如文本的颜色等。程序员可以通过调用专门的GDI函数修改绘图属性,如SetTextColor()函数。CDC类是GDI封装在MFC中最大的一个类。下表列出了CDC中的一些常用绘图函数。三.绘制基本图形(1)画点:SetPixel()函数可以在指定的坐标位置按指定的颜色画点。函数原型说明如下:COLORREFCDC::SetPixel(intX,intY,COLORREFcrColor);其中,(X,Y)为点的坐标位置,crColor参数为点的颜色值。颜色值通过RGB(Red,Green,Blue)来设置,其中三个参数取值0~255。例如,在VcAPP项目中,在CVcAppView类中的OnDraw()函数中加入下列画点语句:pDC->SetPixel(100,20,RGB(255,0,0));pDC->SetPixel(100,20,RGB(255,0,255));pDC->SetPixel(100,20,RGB(0,255,255));(2)画直线和折线(1)画直线需要LineTo()和MoveTo()两个函数的配合使用。LineTo()函数以当前位置所在的点为直线的起点,另指定一个点为直线的终点,画出一段直线。直线的颜色通过画笔的颜色来设定,在后面介绍。LineTo()函数原型说明如下:BOOLCDC::LineTo(intnXEnd,intnYEnd);直线的终点位置由(nXEnd,nYEnd)指定。(2)MoveTo()函数只是将当前位置移动到指定位置,它并没有画出直线,其函数说明为:BOOLCDC::MoveTo(intX,intY);示例:在CVcAppView类中的OnDraw()函数中加入下列画点语句://绘制直线pDC->TextOut(20,60,"Line:");pDC->MoveTo(20,90);pDC->LineTo(160,90);Polyline()函数用来画一条折线,而PolyPolyline()函数则用来画多条折线,它们的函数原型说明如下:(1)BOOLCDC::Polyline(CONSTPOINT*l ppt 关于艾滋病ppt课件精益管理ppt下载地图下载ppt可编辑假如ppt教学课件下载triz基础知识ppt ,intcPoints);(2)BOOLCDC::PolyPolyline(CONSTPOINT*lppt,COUSTDWORD*lpdwPolyPoints,DWORDcCount);在Polyline()函数中,lppt是指向折线顶点数组的指针,而cPoints是折线顶点数组中的顶点数。例如,绘制一条具有4个顶点的折线,程序如下:POINTpolylinepoint[4]={{70,240},{20,190},{70,190},{20,240}};pDC->Polyline(polylinepoint,4);在PolyPolyline()函数中,lppt是指向保存顶点数组的指针,而各条折线的顶点数则保存在lpdwPolyPoints参数所指向的数组中,最后的cCount参数指定折线的数目。例如:POINTpolypolylinePt[9]={{95,160},{120,185},{120,250},{145,160},{120,185},{90,185},{150,185},{80,210},{160,210}};DWORDdwPolyPoints[4]={3,2,2,2};//四段折线,占用3,2,2,2个顶点pDC->PolyPolyline(polypolylinePt,dwPolyPoints,4);注:由于一条折线至少需要2个顶点,因此dwPolyPoints数组中的数不应该小于2。(3)画弧线和曲线通过Arc()函数画弧线或整个椭圆。椭圆限定在一个矩形内,称为外接矩形。Arc()函数的圆形说明如下:BOOLCDC::Arc(intnLeftRect,intnTopRect,intnRightRect,intnBottomRect,intnXStartArc,intnYStartArc,intnXEndArc,intnYEndArc);其中,(nLeftRect,nTopRect)是外接矩形的左上角坐标值,(nRightRect,nBottomRect)是外接矩形的右下角坐标值。而椭圆中心与点(nXStartArc,nYStartArc)所构成的射线与椭圆的交点成为弧线的起点,椭圆中心与点(nXEndArc,nYEndArc)所构成的射线与椭圆的交点成为弧线的终点。椭圆上从始点到终点就形成一条弧线。在Windows系统中,弧线从始点到终点的方向是逆时针方向。inti;for(i=1;i<6;i++){pDC->Arc(260-5*i,70-5*i,260+5*i,70+5*i,0,0,0,0);}for(i=3;i<6;i++){pDC->Arc(260-10*i,70-10*i,260+10*i,70+10*i,(int)260+10*i*cos(60*3.1415926/180),(int)70+10*i*sin(60*3.1415926/180),(int)260+10*i*cos(60*3.1415926/180),(int)70-10*i*sin(60*3.1415926/180));pDC->Arc(260-10*i,70-10*i,260+10*i,70+10*i,(int)260-10*i*cos(60*3.1415926/180),(int)70-10*i*sin(60*3.1415926/180),(int)260-10*i*cos(60*3.1415926/180),(int)70+10*i*sin(60*3.1415926/180));}Bezier曲线是最常见的非规则曲线之一。Bezier曲线属于三次曲线,需要四个控制顶点来确定一条Bezier曲线,其中曲线通过第一点和最后一点,并且第一条边和最后一条边是曲线在起点和终点处的切线,从而确定了曲线的走向。PolyBezier()函数可以画出一条或多条Bezier曲线,其函数原型说明如下:BOOLCDC::PolyBezier(CONSTPOINT*lppt,DWORDcPoints);其中,lppt参数是曲线控制顶点所组成的数组,cPoints参数表示lppt数组中的顶点数,一条Bezier曲线需要四个控制顶点。如果lppt数组用于画多条Bezier曲线,第二条以后的曲线只需要三个控制顶点,因为后面的曲线总是把前一条曲线的终点作为自己的起点。示例:给出四个控制顶点,画出一条Bezier曲线和特征多边形。//绘制Bezier曲线POINTpolyBezier[4]={{20,310},{60,240},{120,300},{160,230}};pDC->Polyline(polyBezier,4);pDC->PolyBezier(polyBezier,4);(4)画封闭曲线Windows中提供了一组画封闭曲线的函数,包括绘制矩形、多边性、椭圆等,这些画封闭曲线的函数不但可以利用画笔来画出轮廓线,同时还可以利用画刷来填充这些封闭曲线所围成的区域。(a)Rectangle()函数用来画矩形,函数原型说明如下:BOOLCDC::Rectangle(intnLeftRect,intnTopRect,intnRightRect,intnBottomRect);其中,参数nLeftRect和nTopRect给出了矩形左上角的坐标,而nRightRect和nBottomRect则给出矩形的右下角坐标。(b)Ellipse()函数的作用则是画椭圆形。在Ellipse()函数中,椭圆是由其外接矩形来确定的,外接矩形的中心与椭圆中心重合,矩形的长与宽和椭圆的长短轴相等。函数说明如下:BOOLCDC::Ellipse(intnLeftRect,intnTopRect,intnRightRect,intnBottomRect);其中的参数说明与Rectangle()函数相同。(c)RoundRect()函数用来画圆角矩形,函数原型说明如下:BOOLCDC::RoundRect(intnLeftRect,intnTopRect,intnRightRect,intnBottomRect,intnWidth,intnHeight);其中的前四个参数与Rectangle()函数相同,nWidth表示圆角的宽度,nHeight表示圆角的高度。(d)Polygon()函数用来画封闭的任意多边形,其函数原型说明如下:BOOLCDC::Polygon((COUSTPOINT*lpPoints,intcCount);其中的参数说明与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);POINTpolygonPts[3]={{390,160},{430,220},{350,210}};pDC->Polygon(polygonPts,3);(5)画笔与画刷当绘制图形时,线条的属性,包括颜色、宽度、样式等都是由画笔来确定的。程序员可以创建画笔,定义画笔的属性,从而画出多彩的图形。创建画笔包括CreatePen()和CreatePenIndirect()两个函数。MFC将这些函数封装在CPen类中,这样画笔就能够被视为对象进行处理。下面介绍创建画笔的方法。方法一:直接构造一个CPen对象,并将定义画笔的参数传给它,例如:CPenpen(PS_SOLID,1,RGB(255,0,0));创建一个宽度为一个像素、实线和红色的画笔。方法二:首先声明一个没有初始化的CPen类对象,然后再用CreatePen()函数定义画笔的属性。例如,CPenPen;Pen.CreatePen(PS_SOLID,1,RGB(255,0,0));方法三:先声明一个CPen类对象和一个描述画笔结构的LOGPEN类对象,并填入画笔的属性值,然后调用CreatePenIndirect()函数来创建画笔。如下所示:CPenPen;LOGPENLogPen;LogPen.lopnStyle=PS_SOLID;LogPen.lopnWidth=1;LogPen.lpenColor=RGB(255,0,0);Pen.CreatePenIndirect(&LogPen);画笔包括样式、宽度和颜色三个属性。下表列出了GDI画笔的样式。inti1;intnPenStyle[]={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=newCPen;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("CreatePenErroe!!");}deletepNewPen;//删除新笔}for(i1=0;i1<7;i1++)//用不同的宽度的笔绘图{//构造新笔pNewPen=newCPen;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("CreatePenErroe!!");}//删除新笔deletepNewPen;}structtagColor//设置颜色表{intr,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=newCPen;//构造新笔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("CreatePenError!!");//出错提示}deletepNewPen;//删除新笔}(b)画刷在进行区域填充或绘制封闭图形时,需要用到画刷。MFC把GDI画刷封装在CBrush类中。画刷分三种基本类型:纯色画刷、阴影画刷和图案画刷。纯色画刷绘图使用单色来定义,颜色由RGB()函数来确定。纯色画刷可以采用直接声明的方法,例如:CBrushBrush(RGB(255,0,0));创建一个红色画刷。也可以采用分步方法,由CreateSolidBrush()函数创建。CBrushBrush;Brush.CreateSolidBrush(RGB(255,0,0));Windows预定义了七种画刷,包括:BLACK_BRUSH、DKGRAY_BRUSH、GRAY_BRUSH、LTGRAY_BRUSH、HOLLOW_BRUSH、NULL_BRUSH和WHITE_BRUSH。可以参照CPen类的方法,采用CreateStockObject()来使用预定义的画刷。阴影画刷使用预定义的六种阴影样式进行绘图。下表列出了六种阴影样式。创建阴影画刷的方法与纯色画刷的创建方法相似,如创建一个45度方向的交叉阴影线的画刷,方法如下:CBrushBrush(HS_DIAGCROSS,RGB(255,0,0));或者CBrushBrush;Brush.CreateHatchBrush(HS_DIAGCROSS,RGB(255,0,0));函数中有两个参数,第一个参数是画刷的阴影样式,第二个参数是阴影线的颜色。示例:绘制缺省画刷的矩形,纯色画刷矩形和绘制100单位的矩形,并且用白色45度交叉线阴影将其填充,程序如下://画刷程序pDC->Rectangle(300,300,400,400);//缺省的画刷,白色//纯色画刷CBrush*pNewBrush1;CBrush*pOldBrush1;pNewBrush1=newCBrush;if(pNewBrush1->CreateSolidBrush(RGB(255,0,0))){//选择新画刷pOldBrush1=pDC->SelectObject(pNewBrush1);//绘制矩形pDC->Rectangle(200,200,300,400);//恢复原有画刷pDC->SelectObject(pOldBrush1);}deletepNewBrush1;//阴影画刷CBrushBrush(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);
本文档为【VISUAL C++ MFC编程XB】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_597436
暂无简介~
格式:ppt
大小:878KB
软件:PowerPoint
页数:45
分类:
上传时间:2019-07-18
浏览量:0