第2章 vc++ 应用程序框架和基本流程.ppt_第1页
第2章 vc++ 应用程序框架和基本流程.ppt_第2页
第2章 vc++ 应用程序框架和基本流程.ppt_第3页
第2章 vc++ 应用程序框架和基本流程.ppt_第4页
第2章 vc++ 应用程序框架和基本流程.ppt_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

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

文档简介

第2章应用程序框架和基本流程 2 1应用程序框架 2 2应用程序的基本流程 2 3应用程序框架类 2 1应用程序框架 所谓应用程序框架 applicationframework 就是应用程序所应具备的一般性软件模块按一定的结构组成的集合 基于MFC的应用程序框架是定义了程序结构的MFC类库中类的集合 运用MFC应用程序框架能获得标准化的程序结构和用户接口 极大地减轻程序员的负担 使程序员不必过多地考虑用户界面 而把主要精力放在程序设计上 以提高程序设计的效率 应用程序框架实际上是一个完整的程序模型 具备标准应用软件所需的一切基本功能 如文件存取 打印预览 数据交换 窗口排列 以及这些功能的使用接口 菜单 工具栏 状态栏 对话框等 有了应用程序框架之后 程序员只要依个人需要在派生类中改写虚函数 定义新的数据成员 用资源编辑器增加或修改用户界面 进行消息映射 用MFC类实现框架中未完成的应用程序的特定功能部分 Sample程序 2 1 1应用程序基本结构 Windows应用程序都有一个窗口作为程序的输入 输出和用户操作界面 而内部的运行系依靠外部发生的事件来驱动 在程序启动 创建和显示窗口后 程序不断等待任何可能的输入 然后做判断 再做适当的处理 这里 输入 是由操作系统通过USER模块捕捉到之后 以消息形式 一种数据结构 进入程序的消息队列之中 因此 为了不断地从消息队列中获取消息 转换消息 分配消息给适当的处理函数 每一个Windows程序都应该有一个消息循环 在Windows程序中 接受并处理消息的主角肯定是窗口 因此 每一个窗口都应该有一个函数负责处理消息 我们称此函数为 窗口函数 窗口函数WindowProc以switch case的方式判断消息的类别 决定处理的方式 另外 对于一个窗口 还必须有创建窗口的函数CreateWindow和显示窗口的函数ShowWindow 在DOS系统下 C C 程序都有一个主函数main 控制程序的流程 同样 在Windows系统下 每一个由C C 编写的Windows程序也有一个主函数AfxWinMain 控制Windows程序的流程 此外 每个Windows程序实例有一些初始化工作需要完成 因此 就应该定义一个初始化函数 InitInstance 纵上所述 一个Windows程序的基本结构至少包括 消息循环函数Run 窗口函数WindowProc 窗口创建函数CreateWindow 窗口显示函数ShowWindow 主函数AfxWinMain 程序初始化函数InitInstance 因此 在MFC类库中 应用程序类CWinApp封装了消息循环函数Run 程序初始化函数InitInstance和退出函数ExitInstance 基于上述情况 采用MFC类库开发的所有Windows程序都至少有一个从CWinApp派生的应用程序类和一个从CWnd派生的窗口类 而AfxWinMain函数则由系统提供 不能更改 窗口基类CWnd则封装了窗口函数WindowProc 窗口创建函数Create 窗口显示函数ShowWindow 并把窗口句柄HWND定义为数据成员 还定义了大量的Windows消息处理函数 2 1 2使用向导生成应用程序框架 AppWizard可为使用MFC的典型Windows应用程序建立开发项目 提供了一系列的对话框 及多种选项供用户选择 用户可以根据不同的选项生成自己所需的具有各种特征的应用程序框架 AppWizard 参见教材P5 9 图2 1 图2 10 下面通过AppWizard来生成一个最简单的应用程序框架 Hello程序 从AppWizardStep1可见 MFC生成的应用程序的用户界面只有三种类型 单文档型 主边框窗口 视图 文档 多文档型 主边框窗口 子边框窗口 视图 文档 对话框型 对话框 控件 我们也可以进一步把MFC应用程序的用户界面简化为二种类型 并简称为窗口型和对话框型 窗口型 边框窗口 视图对话框型 对话框 控件 2 2 1创建全局对象 2 2应用程序的基本流程 应用程序类构成了应用程序的主执行线程 每个基于MFC类库而建立的应用程序都必须有一个且只有一个从CWinApp类派生的全局对象 以Hello程序为例 在应用程序类的实现文件HelloApp cpp中定义 CHelloApptheApp 2 2 2AfxWinMain函数 main函数是一般C C DOS型程序的进入点 而AfxWinMain函数则是Windows程序的进入点 但在VC中程序员不用编写AfxWinMain代码 它是由MFC类库提供的 在应用程序启动时自动调用这个函数 AfxWinMain函数 winmain cpp 定义为 CWinThread pThread AfxGetThread AfxWinInit 图形用户界面初始化pThread InitApplication 程序初始化pThread InitInstance 程序实例初始化pThread Run 消息循环 程序运行 AfxWinTerm 程序终止 InitApplication函数一般没有实质性的内容 程序的初始化主要通过InitInstance函数完成 InitInstance函数主要完成窗口的创建 显示和更新等重要的初始化工作 是CWinApp派生类中必须改写的成员 虚 函数 2 2 3应用程序的初始化 BOOLCHelloApp InitInstance m pMainwnd newCHelloFrame m pMainwnd ShowWindow m nCmdShow m pMainwnd UpdateWindow 现在 执行的脚步到达pThread Run 即调用CWinThread的Run函数 Run函数主要是调用全局函数PeekMessage来检查消息队列 若有消息则调用成员函数PumpMessage泵送消息 分配消息给适当的处理函数进行处理 2 2 4消息循环 theApp 创建全局的应用程序对象 AfxWinMain 入口函数 AfxWinInit GUI初始化 InitInstance 初始化应用程序实例 Create ShowWindow UpdateWindow 创建窗口 显示窗口 更新窗口 Run 消息循环 创建视图对象并显示Hello AfxWinTerm 结束程序 2 2 5程序的启动 运行和退出 2 3应用程序框架类及其主要成员函数 应用程序框架构成 应用程序类 边框窗口类和视图类或对话框类和控件类 2 3 1应用程序类 每个应用程序都从类CWinApp派生出自己的应用程序类 并定义一个全局对象theApp 该应用程序类包含了Windows下MFC应用程序的初始化 运行和结束过程 CWinApp类在MFC体系中的层次如下图所示 CWinApp的主要数据成员 m pszAppName 指定了应用程序名称m pMainWnd 指向主边框窗口的指针m lpCmdLine 指示一个以NULL结尾的字符串 指向应用程序的命令行m nCmdShow 指示最初如何显示窗口 CWinApp的主要成员函数 InitInstance 函数用于初始化实例Run 函数用于处理消息循环ExitInstance 函数使应用程序退出OnIdle 函数用于空闲处理 2 3 2边框窗口类和视图类 1 主边框窗口类每个窗口型的应用程序都有一个且只有一个主边框窗口类CMainFrame 对于单文档 它是从CFrameWnd类派生 对于多文档 它是从CMDIFrameWnd类派生 主边框窗口在屏幕上生成一个带边框的大小可调的桌面窗口 内含一个大的空白工作区域称为视图 它专门负责程序文档数据的屏幕显示和用户对文档的操作 主边框窗口一般还含有菜单栏 工具栏和状态栏 2 子边框窗口类对于多文档的窗口型应用程序 在主边框窗口内还有一个或多个子边框窗口 它由CChildFrame管理 是从CMDIChildWnd类派生 子边框窗口只能位于主边框窗口内 子边框窗口内部完全被视图占据 它不能有自己的菜单栏 工具栏和状态栏 多个子边框窗口与一个主边框窗口共享一套菜单和工具栏 菜单和工具栏显示的内容与当前活动的子边框窗口有关 视图由视图类管理 有二种视图类 无文档 视图结构支持的应用程序 视图类是直接从CWnd类派生有文档 视图结构支持的应用程序 视图类是从CView或其派生类派生 3 视图视图是边框窗口内的大片空白区域 称为客户区或工作区 负责在屏幕上显示程序的数据 并接受用户的操作 边框窗口类和视图类在MFC体系中的层次如下图所示 4 边框窗口类的主要成员函数Create LoadFrame用于创建边框窗口PreCreateWindow用于定制边框窗口ShowWindow UpdateWindow DestroyWindow用于显示 更新 销毁边框窗口GetActiveView GetActiveDocument用于获得当前活动的视图和文档EnableDocking DockControlBar用于允许工具栏停靠和确定具体的停靠位置MDITile MDICascade用于平铺 层叠所有子窗口MDIGetActive获得当前活动的子边框窗口OnPaint用于重绘屏幕 5 视图类的主要成员函数视图类用于程序的输入和输出 其主要成员函数都来自窗口基类CWnd 输入方面主要是改写鼠标消息处理函数 输出方面主要是改写OnPaint函数 以实现屏幕的数据显示和屏幕重绘 但在有文档 视图结构的程序中 OnPaint函数已被改写好 它调用OnDraw函数 因此代以OnDraw函数负责文档的数据显示和屏幕重绘 此处改动的目的是为了便于实现 所见即所得 即打印函数OnPrint也将调用OnDraw函数 这样就可以实现屏幕显示与打印输出是一致的 2 3 3对话框类和控件类 1 对话框类对话框有两种类型 对话框型应用程序和临时弹出式对话框 后者又可分为公用对话框 自定义对话框和属性选项卡三种类型 对话框和控件是Windows应用程序的另一种常见窗口 对话框用于在屏幕上显示一个带标题栏和边框的窗口 内部分布着各式各样的多个控件 控件是一种特定类型的输入输出窗口 用于与用户交互 对话框可有可无菜单栏 但一般没有工具栏和状态栏 对话框型应用程序是Windows的一种常见程序类型 如计算器和WindowsMediaPlayer 本教材中的许多程序也是对话框型应用程序 对话框型应用程序的对话框类是直接从CDialog类派生的 2 控件类控件是一种基本的图形用户界面单元 可用于输入或输出 所有控件都必须由相应的父窗口类 对话框类或表单视图类 管理 MFC提供了大量的控件类 还可使用第三方提供的ActiveX控件 以满足用户的各种需求 MFC控件类可分为三类 一类是在Windows3 x中就已支持的普通控件类 另一类是Windows95 NT 2000中支持的通用控件类 这些控件类都以 Ctrl 结尾 第三类是后期加入的对普通控件类的补充 也是从普通控件类派生的 称为附加控件类 适合于某些特殊应用 通用控件类只能运行在Windows95和 NT3 51及后续版本 另外 对于某些通用控件类来说 应用程序不能定义数据变量而只能创建控件对象 对话框类和控件类在MFC体系中的层次如下图所示 3 对话框类和控件类的主要成员函数OnInitDialog初始化对话框DoModal显示模态对话框DoDataExchange对话数据交换和数据验证GetDlgItem获得某控件的指针GetDlgItemInt SetDlgItemInt获取或设置某控件的整形值

温馨提示

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

评论

0/150

提交评论