基于MFC的应用程序框架分析课件.ppt

上传人(卖家):晟晟文业 文档编号:4578119 上传时间:2022-12-21 格式:PPT 页数:40 大小:271KB
下载 相关 举报
基于MFC的应用程序框架分析课件.ppt_第1页
第1页 / 共40页
基于MFC的应用程序框架分析课件.ppt_第2页
第2页 / 共40页
基于MFC的应用程序框架分析课件.ppt_第3页
第3页 / 共40页
基于MFC的应用程序框架分析课件.ppt_第4页
第4页 / 共40页
基于MFC的应用程序框架分析课件.ppt_第5页
第5页 / 共40页
点击查看更多>>
资源描述

1、第六章第六章 基于基于MFCMFC的应用程序框架分析的应用程序框架分析一一.什么是什么是MFC?二二.程序类和文件程序类和文件三三.程序框架中各个类的作用分析程序框架中各个类的作用分析四四.程序的工作步骤分析程序的工作步骤分析五五.程序框架中各个对象的相互调用关系程序框架中各个对象的相互调用关系一、什么是一、什么是MFC?MFC?1、概述、概述 微软基础类库(微软基础类库(MFC:Microsoft Foundation Class)是微软为)是微软为Windows程序员提供的一个面向对程序员提供的一个面向对象的象的Windows编程接口,它大大简化了编程接口,它大大简化了Windows编编程

2、工作。使用程工作。使用MFC类库的好处是:首先,类库的好处是:首先,MFC提供了提供了一个标准化的结构,这样开发人员不必从头设计创建一个标准化的结构,这样开发人员不必从头设计创建和管理一个标准和管理一个标准Windows应用程序所需的程序,而是应用程序所需的程序,而是“站在巨人肩膀上站在巨人肩膀上”,从一个比较高的起点编程,故,从一个比较高的起点编程,故节省了大量的时间;其次,它提供了大量的代码,指节省了大量的时间;其次,它提供了大量的代码,指导用户编程时实现某些技术和功能。导用户编程时实现某些技术和功能。2、MFC类库的概念及组成类库的概念及组成(1)类库是一个可以在应用中使用的相互关联的类

3、库是一个可以在应用中使用的相互关联的C+类类的集合。的集合。(2)Microsoft提供了一个基础类库提供了一个基础类库MFC,其中包含,其中包含用来开发用来开发C+和和C+Windows应用程序的一组类。基应用程序的一组类。基础类库的核心是以础类库的核心是以C+形式封装了大部分的形式封装了大部分的Windows API。类库表示窗口、对话框、设备上下文、公共。类库表示窗口、对话框、设备上下文、公共GDI对象如画笔、调色板、控制框和其他标准的对象如画笔、调色板、控制框和其他标准的Windows部件。这些类提供了一个面向部件。这些类提供了一个面向Windows中结构的简单中结构的简单的的C+成员

4、函数的接口。成员函数的接口。(3)MFC可分为两个主要部分:可分为两个主要部分:(1)基础类()基础类(2)宏和全程函数。)宏和全程函数。2、使用、使用MFC生成一个应用程序生成一个应用程序-MyDraw创建新应用程序:创建新应用程序:第一步:选择应用程序类型第一步:选择应用程序类型第二步:选择支持的数据库类型第二步:选择支持的数据库类型第三步:选择支持的第三步:选择支持的OLE类型类型第四步:选择应用程序包含的特征第四步:选择应用程序包含的特征第五步:设置其他特征第五步:设置其他特征应用程序运行界面应用程序运行界面 二、程序类和文件二、程序类和文件在在MFC应用程序中包含着四个主要的类:应用

5、程序中包含着四个主要的类:(1)文档类)文档类 (2)视图类)视图类 (3)主框架窗口类)主框架窗口类 (4)应用类)应用类 C+类在文件组织上一般分为两部分:类在文件组织上一般分为两部分:头文件(头文件(.h)和实现文件)和实现文件(.cpp)。类和结构的。类和结构的定义放在头文件中,通过定义放在头文件中,通过include宏插入实现宏插入实现文件中。实现文件用来存放类的各种函数的文件中。实现文件用来存放类的各种函数的实际实现代码。实际实现代码。1 1、文档类、文档类由基类由基类CDocument派生,文档类负责存放程派生,文档类负责存放程序数据并读取磁盘文件数据,或将磁盘文件序数据并读取磁

6、盘文件数据,或将磁盘文件数据写入磁盘文件中。数据写入磁盘文件中。比如在建立一个图形系统时,存储图形的数比如在建立一个图形系统时,存储图形的数据结构等都是放在文档类中的。据结构等都是放在文档类中的。2 2、视图类、视图类视图类是由视图类是由CView类派生的,它负责显示文类派生的,它负责显示文档类的数据,可以显示在屏幕上,也可以输档类的数据,可以显示在屏幕上,也可以输出在打印机和其他设备上。在屏幕上,这个出在打印机和其他设备上。在屏幕上,这个类管理客户窗口。类管理客户窗口。例:在实现一个图形系统时,屏幕上显示、例:在实现一个图形系统时,屏幕上显示、打印机绘图的工作都是由视图类完成的。打印机绘图的

7、工作都是由视图类完成的。3 3、框架类、框架类单文档的框架类由单文档的框架类由CFrameWnd类派生的。用来显示一个标类派生的。用来显示一个标题、一个菜单条、窗口的最大化和最小化按钮,边框,工具题、一个菜单条、窗口的最大化和最小化按钮,边框,工具条以及状态条等。条以及状态条等。多文档应用程序中包含两个框架类:主框架类多文档应用程序中包含两个框架类:主框架类CMainFrame,由由MFC的的CMDIFrameWnd类派生,提供了一个多文档界面类派生,提供了一个多文档界面主窗口的所有功能并管理主窗口中的子窗口,如显示一个标主窗口的所有功能并管理主窗口中的子窗口,如显示一个标题、菜单条等等;子框

8、架类题、菜单条等等;子框架类CChildFrame由由CMDIChildWnd派生,用来管理子窗口。子窗口只能在主窗口内显示,而不派生,用来管理子窗口。子窗口只能在主窗口内显示,而不能在能在Windows桌面上显示。桌面上显示。4 4、应用类、应用类应用类是由应用类是由MFC的的CWinApp类派生的。类派生的。应用类管理程序的总体,它完成应用类管理程序的总体,它完成初始化初始化、运行程序运行程序以及以及进行最后的程序清除工作进行最后的程序清除工作。三、程序框架中各个类的作用分析三、程序框架中各个类的作用分析举例说明:用文稿、黑板,还有一些工举例说明:用文稿、黑板,还有一些工具盒来组成一个工作

9、环境或平台具盒来组成一个工作环境或平台.文档类用来负责文稿的管理工作。文档类用来负责文稿的管理工作。框架类负责黑板的管理工作。框架类负责黑板的管理工作。视图类的作用是显示文稿的内容。视图类的作用是显示文稿的内容。应用类负责建立启动这个工作环境。应用类负责建立启动这个工作环境。四、程序的工作步骤分析四、程序的工作步骤分析运行时,应用程序框架首先获得控制权,依次执行下面的步骤:运行时,应用程序框架首先获得控制权,依次执行下面的步骤:1、构造唯一的应用类对象、构造唯一的应用类对象theApp,调用,调用CWinApp类的构造类的构造函数。函数。2、调用、调用WinMain()函数。()函数。WinM

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

11、断获取消息和处理消息。一直到用户关闭应用程序的窗口,产生产生WM_QUIT消息,调用消息,调用ExitInstance()函数,准备退出。函数,准备退出。5)进行应用程序的收尾工作,比如删除注册)进行应用程序的收尾工作,比如删除注册 的窗口类等。的窗口类等。6)返回。)返回。3、从、从WinMain()函数返回后,删除应用程序的唯一应用类的函数返回后,删除应用程序的唯一应用类的对象,删除时要调用其析构函数。对象,删除时要调用其析构函数。4、终止应用程序。、终止应用程序。五、程序框架中各个类对象的相互调用关系五、程序框架中各个类对象的相互调用关系 1、视图类对象对文档类对象的调用、视图类对象对文

12、档类对象的调用 例例:CDrawDoc *pDoc=GetDocumen();GetDocument()的作用是得到指向文档对象的指针。的作用是得到指向文档对象的指针。2、在框架类对象中获得当前的文档和视图对象指针、在框架类对象中获得当前的文档和视图对象指针 例例:CDrawDoc*pDoc=(CDrawDoc*)GetActiveDocument();CDrawView*pView=(CDrawView*)GetActiveView();3、获得应用类对象的指针、获得应用类对象的指针 例例:CDrawApp*pWinApp=(CDrawApp*)AfxGetApp();4、从应用类对象中获得

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

14、封装,用类对设备描述表进行了封装,用来支持对屏幕或打印机所有的图形输出进行任务处理。来支持对屏幕或打印机所有的图形输出进行任务处理。2、CPaintDC类类CPaintDC类,一般用在函数类,一般用在函数OnPaint()内,以响应内,以响应WM_PAINT消息,消息,WM_PAINT消息是在当窗口的某个区域消息是在当窗口的某个区域需 要 重 画 时 激 发 的 当需 要 重 画 时 激 发 的 当 C P a i n t D C 类 的 对 象,接 收 到类 的 对 象,接 收 到WM_PAINT消息时,自动调用固定的绘制函数,完成客户消息时,自动调用固定的绘制函数,完成客户区的重画。区的重

15、画。3、CClientDC类类 CClientDC对象只能在客户区域绘图。客户区域不包括边框、对象只能在客户区域绘图。客户区域不包括边框、标题栏和菜单栏。标题栏和菜单栏。如果窗口中有工具栏的话,点如果窗口中有工具栏的话,点(0,0)指的是工具栏下最左边的指的是工具栏下最左边的点。点。4、CWindowDC类类 CWindowDC类的对象允许用户在显示器的任何地方绘图。类的对象允许用户在显示器的任何地方绘图。包括窗口边框、标题栏等。包括窗口边框、标题栏等。注意注意:视图窗口没有非客户区域视图窗口没有非客户区域,因此因此CWindowDC更更 适合于框架窗口,而不是视图窗口。适合于框架窗口,而不是

16、视图窗口。二、绘图对象类二、绘图对象类绘图类可以选入绘图对象类来完成图形的绘图类可以选入绘图对象类来完成图形的操作,主要绘图对象类有:操作,主要绘图对象类有:类类 CGdiObject类类 CPen类类 CBrush类类 CFont类类 CRgn类类 CPalette类类 CBitmap 1、CGdiObject类是类是CObject类的派生类,它为不同的类的派生类,它为不同的Windows图形设备界面图形设备界面(GDI)提供了基类。提供了基类。CGdiObject为他的派生类提供了大部分的操作,这些派为他的派生类提供了大部分的操作,这些派生类初始化一个特定的生类初始化一个特定的GDI对象。

17、对象。注意:不能直接建立一个注意:不能直接建立一个CGdiObject对象。对象。2、建立、建立CPen对象的方法对象的方法 (1)CPen pen;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_DASHD

18、OT 5 PS_DASHDOTDOT 6 PS_NULL 注意:线形注意:线形PS_DASH、PS_DOT和和PS_DASHDOTPS_DASHDOTDOT只有在画笔宽度为只有在画笔宽度为1个像素时才能使个像素时才能使用。用。在绘图对象中选入画笔在绘图对象中选入画笔 void CDrawView:OnDraw(CDC*pDC)CPen pen(PS_SOLID,1,RGB(255,0,0);CPen*pOldPen=pDC-SelectObjent(&pen);/将画笔选入绘图对象将画笔选入绘图对象 ./省略画图代码省略画图代码 pDC-SelectObject(pOldPen);/将画笔选出

19、设备环境将画笔选出设备环境 (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);影线画刷影线画刷(1)CBrush brush(HS_CROSS,RGB(255,0,0);(2)CBrush*brush;brush=new CBrush(HS_CROSS,RGB(255,0,0);.delete brush

20、;(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 在绘图对象中选入画刷在绘图对象中选入画刷void CDrawView:OnDraw(CDC*pDC)CBrush brush(HS_CROSS,RGB(255,0,0);/定义并初始化一个画刷实例。定义并初始化一个画刷实例。CBrush*p

21、OldBrush=pDC-SelectObject(&brush);/将画刷选入绘图对象将画刷选入绘图对象 ./省略绘图代码省略绘图代码 pDC-SelectObject(pOldBrush);/恢复原来的画刷恢复原来的画刷(4)CRgn类类CRgn类封装了类封装了Windows图形设备界面区域,区图形设备界面区域,区域可以是椭圆也可以是多边形。域可以是椭圆也可以是多边形。CRgn类的构造函数只有一个,定义一个类的构造函数只有一个,定义一个CRgn类类的对象后,对象不能直接被使用,必须调用一的对象后,对象不能直接被使用,必须调用一个创建函数进行初始化以后才能被使用。个创建函数进行初始化以后才能

22、被使用。常用的创建函数:常用的创建函数:1、BOOL CreateRectRgn(int x1,int y1,int x2,int y2);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(&rr);CRect类类CRect与与Windows的的RECT 结构类似,可通

23、过执行它的成结构类似,可通过执行它的成员函数来操作员函数来操作RECT结构。结构。typedef struct tagRECT typedef struct tagRECT LONG left;LONG left;LONG top;LONG top;LONG right;LONG right;LONG bottom;LONG bottom;RECT;RECT;CPoint类类Cpoint起源于Windows的的POINT 结构,可通过执行它的成员结构,可通过执行它的成员函数来操作函数来操作POINT结构。结构。typedef struct tagPOINT typedef struct tag

24、POINT LONG x;LONG x;LONG y;LONG y;POINT;POINT;POINT POINT用来指定一个点的用来指定一个点的x,yx,y坐标。坐标。2)BOOL CreateEllipticRgn(int x1,int y1,int x2,int y2);;BOOL CreateEllipticRgnIndirect(LPCRECT lpRect);这两个函数分别和这两个函数分别和BOOL CreateRectRgn(int x1,int y1,int x2,int y2);BOOL CreateRectRgnIndirect(LPCRECT lpRect);相类似。相类

25、似。(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;point2.y=200;m_Rgn.

26、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/文本行的角度文本行的角度 i

27、nt nOrientation,/字符的角度字符的角度 int nWeight,/字符粗细度字符粗细度 BYTE bItalic,/倾斜倾斜 BYTE bUnderline,/下划线下划线 BYTE cStrikeOut,/删除线删除线 BYTE nCharSet,/字符集字符集 BYTE nOutPrecision,/字体输出结果和要求字体输出结果和要求 /的匹配程度的匹配程度 BYTE nClipPrecision,/如何剪裁落于剪裁区如何剪裁落于剪裁区 /之外的字符。之外的字符。BYTE nQuiality,/字符属性匹配的精确程度字符属性匹配的精确程度 BYTE nPitchAndFa

28、mily,/字体间距和字体族字体间距和字体族 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);

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(基于MFC的应用程序框架分析课件.ppt)为本站会员(晟晟文业)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|