第2章 vc++ 应用程序框架和基本流程.pptx
《第2章 vc++ 应用程序框架和基本流程.pptx》由会员分享,可在线阅读,更多相关《第2章 vc++ 应用程序框架和基本流程.pptx(29页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第2章章 应用程序框架和基本流程应用程序框架和基本流程 2.1 应用程序框架应用程序框架2.2 应用程序的基本流程应用程序的基本流程2.3 应用程序框架类应用程序框架类2.1 应用程序框架应用程序框架 所谓应用程序框架所谓应用程序框架(application framework),就是应用程序所应具备的一般性软件模块按一定,就是应用程序所应具备的一般性软件模块按一定的结构组成的集合。基于的结构组成的集合。基于MFC的应用程序框架是的应用程序框架是定义了程序结构的定义了程序结构的MFC类库中类的集合。类库中类的集合。运用运用MFC应用程序框架能获得标准化的程序应用程序框架能获得标准化的程序结构
2、和用户接口,极大地减轻程序员的负担,使程结构和用户接口,极大地减轻程序员的负担,使程序员不必过多地考虑用户界面,而把主要精力放在序员不必过多地考虑用户界面,而把主要精力放在程序设计上,以提高程序设计的效率。程序设计上,以提高程序设计的效率。应用程序框架实际上是一个完整的程序模型,应用程序框架实际上是一个完整的程序模型,具备标准应用软件所需的一切基本功能,如文件存具备标准应用软件所需的一切基本功能,如文件存取、打印预览、数据交换,窗口排列,取、打印预览、数据交换,窗口排列,以及,以及这些功能的使用接口(菜单、工具栏、状态栏、对这些功能的使用接口(菜单、工具栏、状态栏、对话框等)。话框等)。有了应
3、用程序框架之后,程序员只要依个人需有了应用程序框架之后,程序员只要依个人需要在派生类中改写虚函数,定义新的数据成员,用要在派生类中改写虚函数,定义新的数据成员,用资源编辑器增加或修改用户界面,进行消息映射,资源编辑器增加或修改用户界面,进行消息映射,用用MFC类实现框架中未完成的应用程序的特定功能类实现框架中未完成的应用程序的特定功能部分。部分。Sample程序程序2.1.1 应用程序基本结构应用程序基本结构 Windows应用程序都有一个窗口作为程序的输应用程序都有一个窗口作为程序的输入入/输出和用户操作界面,而内部的运行系依靠外输出和用户操作界面,而内部的运行系依靠外部发生的事件来驱动。在
4、程序启动、创建和显示窗部发生的事件来驱动。在程序启动、创建和显示窗口后,程序不断等待任何可能的输入,然后做判断,口后,程序不断等待任何可能的输入,然后做判断,再做适当的处理。再做适当的处理。这里,这里,“输入输入”是由操作系统通过是由操作系统通过USER模块模块捕捉到之后,以消息形式(一种数据结构)进入程捕捉到之后,以消息形式(一种数据结构)进入程序的消息队列之中。因此,为了不断地从消息队列序的消息队列之中。因此,为了不断地从消息队列中获取消息,转换消息,分配消息给适当的处理函中获取消息,转换消息,分配消息给适当的处理函数,每一个数,每一个Windows程序都应该有一个消息循环。程序都应该有一
5、个消息循环。在在Windows程序中,接受并处理消息的主角肯程序中,接受并处理消息的主角肯定是窗口。因此,每一个窗口都应该有一个函数负定是窗口。因此,每一个窗口都应该有一个函数负责处理消息,我们称此函数为责处理消息,我们称此函数为“窗口函数窗口函数”。窗口。窗口函数函数WindowProc以以switch/case的方式判断消息的类的方式判断消息的类别,决定处理的方式。另外,对于一个窗口,还必别,决定处理的方式。另外,对于一个窗口,还必须有创建窗口的函数须有创建窗口的函数CreateWindow和显示窗口的函和显示窗口的函数数ShowWindow。在在DOS系系统统下下,C/C+程程序序都都有
6、有一一个个主主函函数数main,控控制制程程序序的的流流程程。同同样样,在在Windows系系统统下下,每每一一个个由由C/C+编编写写的的Windows程程序序也也有有一一个个主函数主函数AfxWinMain,控制,控制Windows程序的流程。程序的流程。此外,每个此外,每个Windows程序实例有一些初始化工程序实例有一些初始化工作需要完成。因此,就应该定义一个初始化函数:作需要完成。因此,就应该定义一个初始化函数:InitInstance。纵上所述,一个纵上所述,一个Windows程序的基本结构至少程序的基本结构至少包括:消息循环函数包括:消息循环函数Run、窗口函数、窗口函数Wind
7、owProc、窗口创建函数窗口创建函数CreateWindow、窗口显示函数、窗口显示函数ShowWindow、主函数、主函数AfxWinMain、程序初始化、程序初始化函数函数InitInstance。因因 此此,在在 MFC类类 库库 中中,应应 用用 程程 序序 类类CWinApp封封装装了了消消息息循循环环函函数数Run、程程序序初初始始化化函数函数InitInstance和退出函数和退出函数ExitInstance。基于上述情况,采用基于上述情况,采用MFC类库开发的所有类库开发的所有Windows程序都至少有一个从程序都至少有一个从CWinApp派生的应派生的应用程序类和一个从用程
8、序类和一个从CWnd派生的窗口类,而派生的窗口类,而AfxWinMain函数则由系统提供,不能更改。函数则由系统提供,不能更改。窗口基类窗口基类CWnd则封装了窗口函数则封装了窗口函数WindowProc、窗口创建函数、窗口创建函数Create、窗口显示函、窗口显示函数数ShowWindow,并把窗口句柄,并把窗口句柄HWND定义为数据定义为数据成员,还定义了大量的成员,还定义了大量的Windows消息处理函数。消息处理函数。2.1.2 使用向导生成应用程序框架使用向导生成应用程序框架 AppWizard可为使用可为使用MFC的典型的典型Windows应应用程序建立开发项目,提供了一系列的对话
9、框,用程序建立开发项目,提供了一系列的对话框,及多种选项供用户选择,用户可以根据不同的选及多种选项供用户选择,用户可以根据不同的选项生成自己所需的具有各种特征的应用程序框架。项生成自己所需的具有各种特征的应用程序框架。AppWizard:参见教材:参见教材P59(图图2.1图图2.10。下面通过下面通过AppWizard来生成一个最简单的应用来生成一个最简单的应用程序框架程序框架(Hello程序程序)。从从AppWizard Step1可见,可见,MFC生成的应用程生成的应用程序的用户界面只有三种类型:序的用户界面只有三种类型:单文档型:主边框窗口单文档型:主边框窗口+视图视图+文档文档 多文
10、档型:主边框窗口多文档型:主边框窗口+子边框窗口子边框窗口+视图视图+文档文档 对话框型:对话框对话框型:对话框+控件控件 我们也可以进一步把我们也可以进一步把MFC应用程序的用户界面应用程序的用户界面简化为二种类型,并简称为窗口型和对话框型:简化为二种类型,并简称为窗口型和对话框型:窗口型:边框窗口窗口型:边框窗口+视图视图 对话框型:对话框对话框型:对话框+控件控件2.2.1 创建全局对象创建全局对象2.2 应用程序的基本流程应用程序的基本流程 应应用用程程序序类类构构成成了了应应用用程程序序的的主主执执行行线线程程。每每个个基基于于MFC类类库库而而建建立立的的应应用用程程序序都都必必须
11、须有有一一个个且且只只有有一一个个从从CWinApp类类派派生生的的全全局局对对象象。以以Hello程程 序序 为为 例例,在在 应应 用用 程程 序序 类类 的的 实实 现现 文文 件件HelloApp.cpp中定义:中定义:CHelloApp theApp;2.2.2 AfxWinMain函数函数 main函数是一般函数是一般C/C+DOS型程序的进入点,型程序的进入点,而而AfxWinMain函数则是函数则是Windows程序的进入点。程序的进入点。但在但在VC中程序员不用编写中程序员不用编写AfxWinMain代码,代码,它是由它是由MFC类库提供的,在应用程序启动时自动调类库提供的,
12、在应用程序启动时自动调用这个函数。用这个函数。AfxWinMain函数函数(winmain.cpp)定义定义为:为:CWinThread*pThread=AfxGetThread();AfxWinInit();/图形用户界面初始化图形用户界面初始化 pThread-InitApplication();/程序初始化程序初始化 pThread-InitInstance();/程序实例初始化程序实例初始化 pThread-Run();/消息循环消息循环(程序运行程序运行)AfxWinTerm();/程序终止程序终止 InitApplication函数一般没有实质性的内容,程函数一般没有实质性的内容,
13、程序的初始化主要通过序的初始化主要通过InitInstance函数完成。函数完成。InitInstance函数主要完成窗口的创建、显示和函数主要完成窗口的创建、显示和更新等重要的初始化工作,是更新等重要的初始化工作,是CWinApp派生类中必派生类中必须改写的成员须改写的成员(虚虚)函数。函数。2.2.3 应用程序的初始化应用程序的初始化BOOL CHelloApp:InitInstance()m_pMainwnd=new CHelloFrame();m_pMainwnd-ShowWindow(m_nCmdShow);m_pMainwnd-UpdateWindow();现在现在,执行的脚步到达
14、执行的脚步到达pThread-Run(),即调即调用用CWinThread的的Run函数。函数。Run函数主要是调用全局函数函数主要是调用全局函数PeekMessage来来检查消息队列,若有消息则调用成员函数检查消息队列,若有消息则调用成员函数PumpMessage泵送消息,分配消息给适当的处理函泵送消息,分配消息给适当的处理函数进行处理。数进行处理。2.2.4 消息循环消息循环theApp /创建全局的应用程序对象创建全局的应用程序对象AfxWinMain /入口函数入口函数AfxWinInit /GUI初始化初始化InitInstance /初始化应用程序实例初始化应用程序实例Create
15、()、ShowWindow()、UpdateWindow()/创建窗口、显示窗口、更新窗口创建窗口、显示窗口、更新窗口Run()/消息循环,创建视图对象并显示消息循环,创建视图对象并显示Hello!AfxWinTerm /结束程序结束程序2.2.5 程序的启动、运行和退出程序的启动、运行和退出2.3 应用程序框架类及其应用程序框架类及其主要成员函数主要成员函数应用程序框架构成:应用程序框架构成:应用程序类应用程序类+边框窗口类和视图类边框窗口类和视图类或或 对话框类和控件类对话框类和控件类2.3.1 应用程序类应用程序类 每个应用程序都从类每个应用程序都从类CWinApp派生出自己的应派生出自
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第2章 vc+ 应用程序框架和基本流程 vc 应用程序 框架 基本 流程
限制150内