基于MFC的应用程序框架分析

上传人:wux****ua 文档编号:16181791 上传时间:2020-09-22 格式:PPT 页数:40 大小:271KB
收藏 版权申诉 举报 下载
基于MFC的应用程序框架分析_第1页
第1页 / 共40页
基于MFC的应用程序框架分析_第2页
第2页 / 共40页
基于MFC的应用程序框架分析_第3页
第3页 / 共40页
资源描述:

《基于MFC的应用程序框架分析》由会员分享,可在线阅读,更多相关《基于MFC的应用程序框架分析(40页珍藏版)》请在装配图网上搜索。

1、第六章 基于MFC的应用程序框架分析,一. 什么是MFC? 二. 程序类和文件 三. 程序框架中各个类的作用分析 四. 程序的工作步骤分析 五. 程序框架中各个对象的相互调用关系,一、什么是MFC?,1、概述 微软基础类库(MFC:Microsoft Foundation Class)是微软为Windows程序员提供的一个面向对象的Windows编程接口,它大大简化了Windows编程工作。使用MFC类库的好处是:首先,MFC提供了一个标准化的结构,这样开发人员不必从头设计创建和管理一个标准Windows应用程序所需的程序,而是“站在巨人肩膀上”,从一个比较高的起点编程,故节省了大量的时间;其

2、次,它提供了大量的代码,指导用户编程时实现某些技术和功能。 2、MFC类库的概念及组成 (1) 类库是一个可以在应用中使用的相互关联的C+类的集合。,(2)Microsoft提供了一个基础类库MFC,其中包含用来开发C+和C+ Windows应用程序的一组类。基础类库的核心是以C+形式封装了大部分的Windows API。类库表示窗口、对话框、设备上下文、公共GDI对象如画笔、调色板、控制框和其他标准的Windows部件。这些类提供了一个面向Windows中结构的简单的C+成员函数的接口。 (3)MFC可分为两个主要部分: (1)基础类(2)宏和全程函数。,2、使用MFC生成一个应用程序 -

3、MyDraw 创建新应用程序:,第一步:选择应用程序类型,第二步:选择支持的数据库类型,第三步:选择支持的OLE类型,第四步:选择应用程序包含的特征,第五步:设置其他特征,应用程序运行界面,二、程序类和文件,在MFC应用程序中包含着四个主要的类: (1)文档类 (2)视图类 (3)主框架窗口类 (4)应用类 C+类在文件组织上一般分为两部分:头文件(.h)和实现文件(.cpp)。类和结构的定义放在头文件中,通过include宏插入实现文件中。实现文件用来存放类的各种函数的实际实现代码。,1、文档类,由基类CDocument派生,文档类负责存放程序数据并读取磁盘文件数据,或将磁盘文件数据写入磁盘

4、文件中。 比如在建立一个图形系统时,存储图形的数据结构等都是放在文档类中的。,2、视图类,视图类是由CView类派生的,它负责显示文档类的数据,可以显示在屏幕上,也可以输出在打印机和其他设备上。在屏幕上,这个类管理客户窗口。 例:在实现一个图形系统时,屏幕上显示、打印机绘图的工作都是由视图类完成的。,3、框架类,单文档的框架类由CFrameWnd类派生的。用来显示一个标题、一个菜单条、窗口的最大化和最小化按钮,边框,工具条以及状态条等。 多文档应用程序中包含两个框架类:主框架类CMainFrame,由MFC的CMDIFrameWnd类派生,提供了一个多文档界面主窗口的所有功能并管理主窗口中的子

5、窗口,如显示一个标题、菜单条等等;子框架类CChildFrame由CMDIChildWnd派生,用来管理子窗口。子窗口只能在主窗口内显示,而不能在Windows桌面上显示。,4、应用类,应用类是由MFC的CWinApp类派生的。应用类管理程序的总体,它完成初始化、运行程序以及进行最后的程序清除工作。,三、程序框架中各个类的作用分析,举例说明:用文稿、黑板,还有一些工具盒来组成一个工作环境或平台. 文档类用来负责文稿的管理工作。 框架类负责黑板的管理工作。 视图类的作用是显示文稿的内容。 应用类负责建立启动这个工作环境。,四、程序的工作步骤分析,运行时,应用程序框架首先获得控制权,依次执行下面的

6、步骤: 1、构造唯一的应用类对象theApp,调用CWinApp类的构造函数。 2、调用WinMain()函数。 WinMain()函数的工作又可细分为: 1)获得指向唯一应用类对象的指针。 2)进行一些内部初始化,若失败,转至第5)步。 3)进行应用程序的初始化,即调用InitInstance()函数进行初始化.如果失败,则调用应用类的ExitInstance ()函数,转至5)。 4)调用应用类的Run()函数,其功能主要是 进行消息循环,不断获取消息和处理消息。一直到用户关闭应用程序的窗口,产生WM_QUIT消息,调用ExitInstance ()函数,准备退出。,5)进行应用程序的收尾

7、工作,比如删除注册 的窗口类等。 6)返回。 3、从WinMain()函数返回后,删除应用程序的唯一应用类的对象,删除时要调用其析构函数。 4、终止应用程序。,五、程序框架中各个类对象的相互调用关系,1、视图类对象对文档类对象的调用 例:CDrawDoc *pDoc=GetDocumen( ); GetDocument()的作用是得到指向文档对象的指针。 2、在框架类对象中获得当前的文档和视图对象指针 例:CDrawDoc* pDoc=(CDrawDoc *)GetActiveDocument(); CDrawView* pView=(CDrawView *)GetActiveView( );

8、 3、获得应用类对象的指针 例:CDrawApp* pWinApp=(CDrawApp*)AfxGetApp(); 4、从应用类对象中获得主框架类对象的指针 例:CMainFrame* pFrame= (CMainFrame*)(AfxGetApp()-m_pMainWnd);,第七章 与图形操作有关的类及主要操作,一、绘图类简介: 绘图要用到MFC的类包括: CDC类、CPaintDC、CClientDC和CWindowDC等,其中CDC类是基础类。 1、CDC类 在Windows环境下,所有的图形输出都是在设备描述表(Device Context)上进行的.CDC类对设备描述表进行了封装,

9、用来支持对屏幕或打印机所有的图形输出进行任务处理。,2、CPaintDC类,CPaintDC类,一般用在函数OnPaint()内,以响应WM_PAINT消息,WM_PAINT消息是在当窗口的某个区域需要重画时激发的当CPaintDC类的对象,接收到WM_PAINT消息时,自动调用固定的绘制函数,完成客户区的重画。,3、CClientDC类 CClientDC对象只能在客户区域绘图。客户区域不包括边框、标题栏和菜单栏。 如果窗口中有工具栏的话,点(0,0)指的是工具栏下最左边的点。 4、CWindowDC类 CWindowDC类的对象允许用户在显示器的任何地方绘图。包括窗口边框、标题栏等。 注意

10、: 视图窗口没有非客户区域,因此CWindowDC更 适合于框架窗口,而不是视图窗口。,二、绘图对象类,绘图类可以选入绘图对象类来完成图形的 操作,主要绘图对象类有: 类 CGdiObject 类 CPen 类 CBrush 类 CFont 类 CRgn 类 CPalette 类 CBitmap,1、CGdiObject类是CObject类的派生类,它为不同的Windows图形设备界面(GDI)提供了基类。 CGdiObject为他的派生类提供了大部分的操作,这些派生类初始化一个特定的GDI对象。 注意:不能直接建立一个CGdiObject对象。 2、建立CPen对象的方法 (1)CPen p

11、en; pen.CreatePen(PS_SOLID,1,RGB(255,0,0); (2)CPen pen (PS_SOLID,1,RGB(255,0,0); (3)CPen* pen; pen=new CPen (PS_SOLID,1,RGB(255,0,0); 删除画笔:delete pen;,画笔画线的线形,如下所示: 序号 名称 线形 1 PS_SOLID 2 PS_DASH 3 PS_DOT 4 PS_DASHDOT 5 PS_DASHDOTDOT 6 PS_NULL 注意:线形PS_DASH、 PS_DOT和PS_DASHDOT PS_DASHDOTDOT只有在画笔宽度为1个像素

12、时才能使 用。,在绘图对象中选入画笔 void CDrawView:OnDraw(CDC* pDC) CPen pen (PS_SOLID,1,RGB(255,0,0); CPen* pOldPen=pDC-SelectObjent( /将画笔选出设备环境 ,(3)构造CBrush对象的方法,实心画刷 (1)CBrush brush(RGB(255,0,0); (2)CBrush* brush; brush=new CBrush(RGB(255,0,0); . delete brush; (3)CBrush brush; brush.CreateSolidBrush(RGB(255,0,0);

13、,影线画刷 (1)CBrush brush(HS_CROSS,RGB(255,0,0); (2)CBrush* brush; brush=new CBrush(HS_CROSS,RGB(255,0,0); . delete brush; (3)CBrush brush; brush.CreateSolidBrush(HS_CROSS,RGB(255,0,0);,影线画刷种类 序号 名称 填充模式 0 HS_HORIZONTAL 1 HS_VERTICAL 2 HS_FDIAGONAL 3 HS_BDIAGONAL 4 HS_CROSS 5 HS_DIAGCROSS,在绘图对象中选入画刷,voi

14、d CDrawView:OnDraw(CDC* pDC) CBrush brush(HS_CROSS,RGB(255,0,0); /定义并初始化一个画刷实例。 CBrush* pOldBrush=pDC-SelectObject( /恢复原来的画刷 ,(4)CRgn类,CRgn类封装了Windows图形设备界面区域,区 域可以是椭圆也可以是多边形。 CRgn类的构造函数只有一个,定义一个CRgn类 的对象后,对象不能直接被使用,必须调用一 个创建函数进行初始化以后才能被使用。,常用的创建函数:,1、BOOL CreateRectRgn(int x1,int y1,int x2,int y2);

15、 BOOL CreateRectRgnIndirect(LPCRECT lpRect); 初始画一个矩形区域。 CRgn m_Rgn; m_Rgn.CreateRectRgn(0,0,200,200); CRect rr; rr.left=0; rr.bottom=200; rr.right=200; rr.top=0; m_Rgn. CreateRectRgnIndirect(,CRect类,类CRect与Windows的RECT 结构类似,可通过执行它的成员函数来操作RECT结构。 typedef struct tagRECT LONG left; LONG top; LONG right

16、; LONG bottom; RECT;,CPoint类,类Cpoint起源于Windows的POINT 结构,可通过执行它的成员函数来操作POINT结构。 typedef struct tagPOINT LONG x; LONG y; POINT; POINT用来指定一个点的x,y坐标。,2) BOOL CreateEllipticRgn(int x1,int y1, int x2,int y2);; BOOL CreateEllipticRgnIndirect(LPCRECT lpRect); 这两个函数分别和 BOOL CreateRectRgn(int x1,int y1,int x2

17、,int y2); BOOL CreateRectRgnIndirect(LPCRECT lpRect); 相类似。,(3) BOOL CreatePolygonRgn(LPPOINT lpPoints,int nCount,int nMode); 此函数创建一个封闭的多边形区域, lpPoints指向一个POINT结构或CPoint对象的数组, nCount是顶点的数目,nMode是多边形的填充模式。 例:CPoint point3; CRgn m_Rgn; point0.x=100;point0.y=100; point1.x=200;point1.y=10; point2.x=100;p

18、oint2.y=200; m_Rgn.CreatePolygonRgn(point,3,0); pDC-Polygon(point,3); /绘制多边形区域,并用画刷填充。,字体的创建分两步 1)定义一个CFont类的对象。 CFont myFont; 2)调用CFont类的创建字体函数. myFont.CreateFont(.); CreateFont()函数原型如下: BOOL CreateFont(int nHight,/字体高度 int nWidth,/字符平均宽度 int nEscapement/文本行的角度 int nOrientation,/字符的角度 int nWeight,/

19、字符粗细度 BYTE bItalic,/倾斜,BYTE bUnderline,/下划线 BYTE cStrikeOut,/删除线 BYTE nCharSet,/字符集 BYTE nOutPrecision,/字体输出结果和要求 /的匹配程度 BYTE nClipPrecision,/如何剪裁落于剪裁区 /之外的字符。 BYTE nQuiality,/字符属性匹配的精确程度 BYTE nPitchAndFamily,/字体间距和字体族 LPCTSTR lpszFacename/字体名称 );,例:myFont.CreateFont( -50,/字体字符的逻辑高度 0,/字符平均宽度取默认值 900,/文本行角度为90度 900,/字符角度为90度 FW_NORMAL,/正常体 FALSE,/不倾斜 TRUE,/加下划线 FALSE,/不加删除线 ANSI_CHARSET,/标准字符集 OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH|FF_MODERN, Courier New );,

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!