基于MFC的应用程序框架分析_第1页
基于MFC的应用程序框架分析_第2页
基于MFC的应用程序框架分析_第3页
基于MFC的应用程序框架分析_第4页
基于MFC的应用程序框架分析_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第六章基于MFC的应用程序框架分析一.什么是MFC?二.程序类和文件三.程序框架中各个类的作用分析四.程序的工作步骤分析五.程序框架中各个对象的相互调用关系一、什么是MFC?1、概述微软根底类库〔MFC:MicrosoftFoundationClass〕是微软为Windows程序员提供的一个面向对象的Windows编程接口,它大大简化了Windows编程工作。使用MFC类库的好处是:首先,MFC提供了一个标准化的结构,这样开发人员不必从头设计创立和管理一个标准Windows应用程序所需的程序,而是“站在巨人肩膀上〞,从一个比较高的起点编程,故节省了大量的时间;其次,它提供了大量的代码,指导用户编程时实现某些技术和功能。2、MFC类库的概念及组成〔1〕类库是一个可以在应用中使用的相互关联的C++类的集合。〔2〕Microsoft提供了一个根底类库MFC,其中包含用来开发C++和C++Windows应用程序的一组类。根底类库的核心是以C++形式封装了大局部的WindowsAPI。类库表示窗口、对话框、设备上下文、公共GDI对象如画笔、调色板、控制框和其他标准的Windows部件。这些类提供了一个面向Windows中结构的简单的C++成员函数的接口。〔3〕MFC可分为两个主要局部:〔1〕根底类〔2〕宏和全程函数。

2、使用MFC生成一个应用程序-MyDraw创立新应用程序:第一步:选择应用程序类型第二步:选择支持的数据库类型第三步:选择支持的OLE类型第四步:选择应用程序包含的特征第五步:设置其他特征应用程序运行界面二、程序类和文件在MFC应用程序中包含着四个主要的类:〔1〕文档类〔2〕视图类〔3〕主框架窗口类〔4〕应用类C++类在文件组织上一般分为两局部:头文件〔.h〕和实现文件(.cpp)。类和结构的定义放在头文件中,通过include宏插入实现文件中。实现文件用来存放类的各种函数的实际实现代码。1、文档类由基类CDocument派生,文档类负责存放程序数据并读取磁盘文件数据,或将磁盘文件数据写入磁盘文件中。比方在建立一个图形系统时,存储图形的数据结构等都是放在文档类中的。2、视图类视图类是由CView类派生的,它负责显示文档类的数据,可以显示在屏幕上,也可以输出在打印机和其他设备上。在屏幕上,这个类管理客户窗口。例:在实现一个图形系统时,屏幕上显示、打印机绘图的工作都是由视图类完成的。3、框架类单文档的框架类由CFrameWnd类派生的。用来显示一个标题、一个菜单条、窗口的最大化和最小化按钮,边框,工具条以及状态条等。多文档应用程序中包含两个框架类:主框架类CMainFrame,由MFC的CMDIFrameWnd类派生,提供了一个多文档界面主窗口的所有功能并管理主窗口中的子窗口,如显示一个标题、菜单条等等;子框架类CChildFrame由CMDIChildWnd派生,用来管理子窗口。子窗口只能在主窗口内显示,而不能在Windows桌面上显示。

4、应用类应用类是由MFC的CWinApp类派生的。应用类管理程序的总体,它完成初始化、运行程序以及进行最后的程序去除工作。三、程序框架中各个类的作用分析举例说明:用文稿、黑板,还有一些工具盒来组成一个工作环境或平台.文档类用来负责文稿的管理工作。框架类负责黑板的管理工作。视图类的作用是显示文稿的内容。应用类负责建立启动这个工作环境。四、程序的工作步骤分析运行时,应用程序框架首先获得控制权,依次执行下面的步骤:1、构造唯一的应用类对象theApp,调用CWinApp类的构造函数。2、调用WinMain〔〕函数。WinMain()函数的工作又可细分为:1〕获得指向唯一应用类对象的指针。2〕进行一些内部初始化,假设失败,转至第5〕步。3〕进行应用程序的初始化,即调用InitInstance()函数进行初始化.如果失败,那么调用应用类的ExitInstance()函数,转至5〕。4〕调用应用类的Run〔〕函数,其功能主要是进行消息循环,不断获取消息和处理消息。一直到用户关闭应用程序的窗口,产生WM_QUIT消息,调用ExitInstance()函数,准备退出。

5〕进行应用程序的收尾工作,比方删除注册的窗口类等。6〕返回。3、从WinMain()函数返回后,删除应用程序的唯一应用类的对象,删除时要调用其析构函数。4、终止应用程序。五、程序框架中各个类对象的相互调用关系1、视图类对象对文档类对象的调用例:CDrawDoc*pDoc=GetDocumen();GetDocument()的作用是得到指向文档对象的指针。2、在框架类对象中获得当前的文档和视图对象指针例:CDrawDoc*pDoc=(CDrawDoc*)GetActiveDocument();CDrawView*pView=(CDrawView*)GetActiveView();3、获得应用类对象的指针例:CDrawApp*pWinApp=(CDrawApp*)AfxGetApp();4、从应用类对象中获得主框架类对象的指针例:CMainFrame*pFrame=(CMainFrame*)(AfxGetApp()->m_pMainWnd);第七章与图形操作有关的类及主要操作一、绘图类简介:绘图要用到MFC的类包括:CDC类、CPaintDC、CClientDC和CWindowDC等,其中CDC类是根底类。1、CDC类在Windows环境下,所有的图形输出都是在设备描述表(DeviceContext)上进行的.CDC类对设备描述表进行了封装,用来支持对屏幕或打印机所有的图形输出进行任务处理。2、CPaintDC类CPaintDC类,一般用在函数OnPaint()内,以响应WM_PAINT消息,WM_PAINT消息是在当窗口的某个区域需要重画时激发的当CPaintDC类的对象,接收到WM_PAINT消息时,自动调用固定的绘制函数,完成客户区的重画。3、CClientDC类CClientDC对象只能在客户区域绘图。客户区域不包括边框、标题栏和菜单栏。如果窗口中有工具栏的话,点(0,0)指的是工具栏下最左边的点。4、CWindowDC类CWindowDC类的对象允许用户在显示器的任何地方绘图。包括窗口边框、标题栏等。注意:视图窗口没有非客户区域,因此CWindowDC更适合于框架窗口,而不是视图窗口。二、绘图对象类绘图类可以选入绘图对象类来完成图形的操作,主要绘图对象类有:类CGdiObject类CPen类CBrush类CFont类CRgn类CPalette类CBitmap1、CGdiObject类是CObject类的派生类,它为不同的Windows图形设备界面(GDI)提供了基类。CGdiObject为他的派生类提供了大局部的操作,这些派生类初始化一个特定的GDI对象。注意:不能直接建立一个CGdiObject对象。2、建立CPen对象的方法(1)CPenpen;pen.CreatePen(PS_SOLID,1,RGB(255,0,0));(2)CPenpen(PS_SOLID,1,RGB(255,0,0));(3)CPen*pen;pen=newCPen(PS_SOLID,1,RGB(255,0,0));删除画笔:deletepen;画笔画线的线形,如下所示:序号名称线形1PS_SOLID2PS_DASH3PS_DOT4PS_DASHDOT5PS_DASHDOTDOT6PS_NULL注意:线形PS_DASH、PS_DOT和PS_DASHDOTPS_DASHDOTDOT只有在画笔宽度为1个像素时才能使用。在绘图对象中选入画笔voidCDrawView::OnDraw(CDC*pDC){CPenpen(PS_SOLID,1,RGB(255,0,0));CPen*pOldPen=pDC->SelectObjent(&pen);//将画笔选入绘图对象.................//省略画图代码pDC->SelectObject(pOldPen);//将画笔选出设备环境}(3)构造CBrush对象的方法实心画刷(1)CBrushbrush(RGB(255,0,0));(2)CBrush*brush;brush=newCBrush(RGB(255,0,0));..........deletebrush;(3)CBrushbrush;brush.CreateSolidBrush(RGB(255,0,0));影线画刷(1)CBrushbrush(HS_CROSS,RGB(255,0,0));(2)CBrush*brush;brush=newCBrush(HS_CROSS,RGB(255,0,0));..........deletebrush;(3)CBrushbrush;brush.CreateSolidBrush(HS_CROSS,RGB(255,0,0));影线画刷种类序号名称填充模式0HS_HORIZONTAL1HS_VERTICAL2HS_FDIAGONAL3HS_BDIAGONAL4HS_CROSS5HS_DIAGCROSS在绘图对象中选入画刷voidCDrawView::OnDraw(CDC*pDC){CBrushbrush(HS_CROSS,RGB(255,0,0));//定义并初始化一个画刷实例。CBrush*pOldBrush=pDC->SelectObject(&brush);//将画刷选入绘图对象......................//省略绘图代码pDC->SelectObject(pOldBrush);//恢复原来的画刷}〔4〕CRgn类CRgn类封装了Windows图形设备界面区域,区域可以是椭圆也可以是多边形。CRgn类的构造函数只有一个,定义一个CRgn类的对象后,对象不能直接被使用,必须调用一个创立函数进行初始化以后才能被使用。常用的创立函数:1、BOOLCreateRectRgn(intx1,inty1,intx2,inty2);BOOLCreateRectRgnIndirect(LPCRECTlpRect);初始画一个矩形区域。CRgnm_Rgn;m_Rgn.CreateRectRgn(0,0,200,200);CRectrr;rr.left=0;rr.bottom=200;rr.right=200;rr.top=0;m_Rgn.CreateRectRgnIndirect(&rr);CRect类类CRect与Windows的RECT结构类似,可通过执行它的成员函数来操作RECT结构。typedefstructtagRECT{

LONGleft;

LONGtop;

LONGright;

LONGbottom;}RECT;CPoint类类Cpoint起源于Windows的POINT结构,可通过执行它的成员函数来操作POINT结构。typedefstructtagPOINT{

LONGx;

LONGy;}POINT;POINT用来指定一个点的x,y坐标。2)BOOLCreateEllipticRgn(intx1,inty1,intx2,inty2);;BOOLCreateEllipticRgnIndirect(LPCRECTlpRect);这两个函数分别和BOOLCreateRectRgn(intx1,inty1,intx2,inty2);BOOLCreateRectRgnIndirect(LPCRECTlpRect);相类似。(3)BOOLCreatePolygonRgn(LPPOINTlpPoints,intnCount,intnMode);此函数创立一个封闭的多边形区域,lpPoints指向一个POINT结构或CPoint对象的数组,nCount是顶点的数目,nMode是多边形的填充模式。例:CPointpoint[3]; CRgnm_Rgn; point[0].x=100;point[0].y=100; point[1].x=200;point[1].y=10; point[2].x=100;point[2].y=200; m_Rgn.CreatePolygonRgn(point,3,0); pDC->Polygon(point,3);//绘制多边形区域,并用画刷填充。字体的创立分两步1)定义一个CFont类的对象。CFontmyFont;2)调用CFont类的创立字体函数.myFont.CreateFont(...);CreateFont()函数原型如下:BOOLCreateFont(intnHight,//字体高度intnW

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论