已阅读5页,还剩72页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
4 14 2020 WINDOWS程序开发讲师 鲍钰 1 MFC框架基础介绍 讲师 鲍钰ybao 4 14 2020 WINDOWS程序开发讲师 鲍钰 2 MicrosoftFoundationClass微软基础类 4 14 2020 WINDOWS程序开发讲师 鲍钰 3 MFC基础 用传统的Windows编程方法开发应用程序 你会深刻地体会到 即使是开发一个简单地Windows应用程序也需要对Windows的编程原理有很深刻的认识 同时也要手工编写很多的代码 因为程序的出错率几乎是随着代码长度的增加呈几何级数增长的 这就使得高度程序变得非常困难 所以传统的Windows编程是需要极大的耐心和丰富的编程经验的 4 14 2020 WINDOWS程序开发讲师 鲍钰 4 MFC基础 近几年来 面向对象技术无论是在理论还是实践上都在飞速地发展 面向对象技术中最重要的就是 对象 的概念 它把现实世界中的气球 自行车等客观实体抽象成程序中的 对象 这种 对象 具有一定的属性和方法 这里的属性指对象本身的各种特性参数 如气球的体积 自行车的长度等 而方法是指对象本身所能执行的功能 如气球能飞 自行车能滚动等 一个具体的对象可以有许多的属性和方法 面向对象技术的重要特点就是对象的封装性 对于外界而言 并不需要知道对象有哪些属性 也不需要知道对象本身的方法是如何实现的 而只需要调用对象所提供的方法来完成特定的功能 从这里我们可以看出 当把面向对象技术应用到程序设计中时 程序只是在编写对象方法时才需要关心对象本身的细节问题 大部分的时间是放在对对象的方法的调用上 组织这些对象进行协同工作 4 14 2020 WINDOWS程序开发讲师 鲍钰 5 MFC基础 MFC的英文全称是MicrosoftFundationClasses 即微软的基本类库 MFC的本质就是一个包含了许多微软公司已经定义好的对象的类库 自从1993年美国微软公司推出VisualC 1 0后便配套推出了微软基础类库MFC1 0 MicrosoftFounddationClass MFC1 0第一个拉开了以面向对象的程序设计方法编制多任务 多进程的GUI应用软件系统的序幕 微软公司在16位平台上几乎没有停留多久 便陆续推出了MFC1 5 MFC2 0 含支持32位的Win32 MFC3 0 MFC4 0 1997年5月随着VisualC 5 0的问世 人们看到了支持Web应用和ActiveX的MFC6 0基础类库系统 4 14 2020 WINDOWS程序开发讲师 鲍钰 6 MFC基础 虽然我们要编写的程序在功能是千差万别的 但从本制裁上来讲 都可以化归为用户界面的设计 对文件的操作 多媒体的使用 数据库的访问等等一些最主要的方面 这一点正是微软提供MFC类库最重要的原因 在这个类库中包含了100多个程序开发过程中最常用到的对象 在进行程序设计的时候 如果类库中的某个对象能完成所需的功能 这时我们只要简单地调用已有对象的方法就可以了 我们还可以利用面向对象技术中很重要的 继承 方法从类库中的已有对象派生出我们自己的对象 这时派生出来的对象除了具有类库中对象的特性和功能之外 还可以由我们自己根据需要加上所需的特性和方法 产生一个更专门的 功能更为强大的对象 当然 你也可以在程序中创建全新的对象 并根据需要不断完美对象的功能 4 14 2020 WINDOWS程序开发讲师 鲍钰 7 MFC基础 正是由于MFC编程方法充分利用了面向对象技术的优点 它使得我们编程时极少需要关心对象方法的实现细节 同时类库中的各种对象的强大功能足以完成我们程序中的绝大部分所需功能 这使得应用程序中程序员所需要编写的代码大为减少 有力地保证了程序良好的可调试性 4 14 2020 WINDOWS程序开发讲师 鲍钰 8 MFC基础 最后要指出的是 MFC类库在提供对象的各种属性和方法都是经过地谨慎地编写和严格地测试 可靠性很高 这就保证了使用MFC类库不会影响程序的可靠性和正确性 MFC是很庞大的 例如 版本7 0中包含了大约200个不同的类 万幸的是 你在典型的程序中不需要使用所有的函数 事实上 你可能只需要使用其中的10多个MFC中的不同类就可以建立一个非常漂亮的程序 4 14 2020 WINDOWS程序开发讲师 鲍钰 9 微软基础类库MFC 4 14 2020 WINDOWS程序开发讲师 鲍钰 10 MFC体系结构MFC是个相当庞大的类库 各个类间的继承与派生关系井井有条 CObject类是MFC的基类 其它大部分类都是从CObject派生而来的 CObject类的派生类按功能可分为多个部分 下面简要介绍部分常用的类的派生结构 4 14 2020 WINDOWS程序开发讲师 鲍钰 11 窗口类图 部分窗口类的继承关系 CObject CCmdTarget CWnd CFrameWnd CView CDialogBox 4 14 2020 WINDOWS程序开发讲师 鲍钰 12 其中 CCmdTarget 命令目标类 是MFC中拥有消息循环和消息处理机制的基类 关于MFCWindows程序中建立消息处理机制的步骤在后面详细介绍 CWnd类是从CCmdTarget中派生出来的重要类 它是所有窗口类的基类 CCmdTarget间接派生出了文档 视图结构中应用程序框架中的许多重要的类 CWinApp CFrameWnd CDocument CView等 SDI应用程序框架的四个主要的类 4 14 2020 WINDOWS程序开发讲师 鲍钰 13 应用程序框架类图 应用程序框架类的继承关系CWinApp类是从CCmdTarget中派生出来的最重要的类 每个用MFC编写的Windows程序必须有一个它的派生类的对象 它代表一个应用程序 整个程序的运行都由它负责 CWinApp类很大程度上隐藏了APIWindows程序中WinMain函数 CObject CCmdTarget CWinThread CDocument CWinApp 4 14 2020 WINDOWS程序开发讲师 鲍钰 14 图形绘制类图 图形绘制类的继承关系图形绘制类的基类是CDC 设备环境类 CDC类提供了基本的绘图及文本输出函数 4 14 2020 WINDOWS程序开发讲师 鲍钰 15 图形对象类图 部分绘图对象类的继承关系绘图对象类提供给CDC及其派生类在绘图时所需的各种图形对象 如画笔 刷子 字体等 4 14 2020 WINDOWS程序开发讲师 鲍钰 16 MFC体系结构 MFC主要组成部分 类 宏和全局函数 类是MFC中最主要的内容 MFC类是以层次结构方式组织起来的 MFC中的类分成两部分 除了一些辅助类 大多数的MFC类是直接或间接从根类CObject派生而来 几乎每一个派生层次都与一具体的Windows实例相对应 如文档类 窗口类和视图类等 MFC宏主要功能 消息映射 运行时对象类型服务 诊断服务 异常处理 MFC约定 全局函数以 Afx 为前缀 全局变量以 afx 为前缀 4 14 2020 WINDOWS程序开发讲师 鲍钰 17 宏就是用预处理指令 define定义一个标识符 用它来表示一个字符串或一段源代码 MFC宏作为MFC类库的一个组成部分在MFC应用程序中经常出现 MFC宏在Afxwin h Afx h及Afxmsg h等MFC头文件中分别进行了定义 MFC提供的宏有很多 常用的包括消息映射宏 运行时类型识别的宏 调试宏和异常宏等 下表列出了一般MFC编程时要用到的宏 MFC宏 4 14 2020 WINDOWS程序开发讲师 鲍钰 18 4 14 2020 WINDOWS程序开发讲师 鲍钰 19 MFC调试宏 跟踪声明和断言在查找程序设计错误时是非常有用的 跟踪声明可以让程序在运行过程中遇到跟踪声明时在输出窗口显示指定的信息 而断言使程序在断言条件不成立时暂停程序的运行 MFC提供了一些跟踪声明和断言宏用于程序调试 这些宏只能用于DEBUG版本应用程序的调试状态 1 TRACE 宏语法说明如下 TRACE 其中参数是由输出格式和变量等组成的输出表达式 其格式与函数printf 的参数一样 它指定调试时要在Output窗口输出的内容 4 14 2020 WINDOWS程序开发讲师 鲍钰 20 char szName LiMing intnAge 18 TRACE Name s Age d n szName nAge 只有在调试的时候才可以使用 才可以有结果输出 例1对于以下代码 调试时在Output窗口输出以下内容 Name LiMing Age 18 4 14 2020 WINDOWS程序开发讲师 鲍钰 21 例2设自定义一个CFrameWnd的派生类CMyFrame 在程序中构建一个与CMyFrame相关联的文档模板对象 并为构键的文档模板创建框架窗口 CMyFrame pFrame CMyFrame AfxGetMainWnd ASSERT pFrame IsKindOf RUNTIME CLASS CMyFrame 判断pFrame的类型pFrame DoSomeOperation ASSERT 1 2 当条件为假时 退出程序调试的时候可以调用 4 14 2020 WINDOWS程序开发讲师 鲍钰 22 目录MFCBaseMacro下例程 F5看TRACE信息 右键ASSERT退出 4 14 2020 WINDOWS程序开发讲师 鲍钰 23 常用的MFC类 MFC库中的类按层次关系划分类根类 CObject应用程序体系结构类窗口 对话框和控件类绘图和打印类简单数据类型类数组 列表和映射类文件和数据库类Internet和网络工作类OLE类调试和异常类 4 14 2020 WINDOWS程序开发讲师 鲍钰 24 CRuntimeClass结构CRuntimeClass在MFC中是以结构的方式定义 它含有使用CRuntimeClass结构的类的有关信息 与CObject类一同实现运行时类型识别的功能 CRuntimeClass结构包含了类名 对象所占存储空间大小及类的版本号等成员变量和动态对象创建 派生关系判断等成员函数 每个从CObject类派生的类都有一个CRuntimeClass对象同它关联 要使用CRuntimeClass结构 必须结合使用RUNTIME CLASS 宏和其它有关运行时类型识别的MFC宏 4 14 2020 WINDOWS程序开发讲师 鲍钰 25 CObject类由于MFC中大部分类是从CObject类继承而来的 CObject类描述了几乎所有的MFC类的一些公共特性 CObject类为程序员提供了对象诊断 运行时类型识别和序列化等功能 对象诊断 MFC提供了两种诊断特性 利用成员函数AssertValid 进行对象有效性检查 使得类可以在继续运行前对自己进行正确性检查 利用成员函数Dump 输出对象的数据成员的值 运行时访问类的信息 提供GetRuntimeClass 和IskindOf 两个成员函数来支持运行时类型识别 对象序列化 4 14 2020 WINDOWS程序开发讲师 鲍钰 26 命令相关类 CCmdTarget类该类是CObject的子类 它是MFC库中所有具有消息映射属性的基类 消息映射规定了当一对象接收到消息命令时 应调用哪一个函数对该消息进行处理 设置光标 CCmdTarget类定义3个函数用于改变光标状态 BeginWaitCursor 将光标改为沙漏形状 EndWaitCursor 将光标改回调用BeginWait Cursor 之前的形状 RestoreWaitCursor 用于将光标还原为等待状态 voidCMyView OnSomeCommand BeginWaitCursor 显示沙漏状光标 进行某种操作EndWaitCursor 恢复原来光标的形状 4 14 2020 WINDOWS程序开发讲师 鲍钰 27 窗口应用程序类 CWinApp类在MFC应用程序中 CWinApp类取代了WinMain 主函数在SDK应用程序中的地位 传统SDK应用程序WinMain 函数完成的工作现在由类CWinApp的InitApplication InitInstance 和Run 三个成员函数承担 CWinApp类封装了初始化 运行 终止应用程序的代码 在任何MFC应用程序中有且仅有一个CWinApp派生类的对象 它代表了程序中运行的主线程 也代表了应用程序本身 4 14 2020 WINDOWS程序开发讲师 鲍钰 28 可视对象类 CWnd类CWnd类由CCmdTarget类直接派生而来 该类及其派生类的实例是一个窗口 CWnd类代表了MFC中最基本的GUI对象 它是一个功能最完善 成员函数最多的MFC类 窗口的实例包括应用程序主窗口 对话框和控件等 CWnd类提供的功能包括注册新窗口类 创建窗口及子窗口 获取窗口 管理窗口 访问窗口及控件 控制窗口光标 创建和使用句柄和支持工具提示等 CWnd提供了MFC中所有窗口类的基本功能 是CCmdTarget类的子类 4 14 2020 WINDOWS程序开发讲师 鲍钰 29 其它可视对象类 4 14 2020 WINDOWS程序开发讲师 鲍钰 30 其它可视对象类 菜单类 CMenu类 该类是CObject类的子类 用于管理菜单 它是一个WindowsHMenu的封装 提供了与窗口有关的菜单资源建立 修改 跟踪及删除的成员函数 对话框类 CDialog类 由于对话框是一个特殊的窗口 所以该类是从CWnd类中派生出来的 对话框子层次结构包括通用对话框类CDialog以及支持文件选择 颜色选择 字体选择 打印 替换文本的公共对话框子类 4 14 2020 WINDOWS程序开发讲师 鲍钰 31 其它可视对象类 控件类 控件子层次结构包括若干类 使用这些类可建立静态文本 命令按钮 位图按钮 列表框 组合框 滚动条 编辑框等 这些直观控件为Windows应用程序提供了各种输入和显示界面 控件条类 CControlBar类 控件条子层次结构为工具条 状态条 对话条和分割窗口建立模型 该类是CToolBar CStatusBar CDialogBar的基类 负责管理工具条 状态条 对话条的一些成员函数 控件条指的是连接在主窗口框架的顶部或底部的小窗口 4 14 2020 WINDOWS程序开发讲师 鲍钰 32 其它可视对象类 绘画对象类 CGdiObject类 图形绘画对象子层次结构以CGdiObject类为根类 可用于建立绘画对象模型 如画笔 刷子 字体 位图 调色板等 设备描述表类 CDC类 该类及其子类支持设备描述表对象 是CObject类的子类 CDC类是一个较大的类 包括许多成员函数 如映射函数 绘画工具函数 区域函数等 通过CDC对象的成员函数可以完成所有的绘画工作 4 14 2020 WINDOWS程序开发讲师 鲍钰 33 CFrameWnd类CFrameWnd类是CWnd类的派生类 主要用来掌管一个窗口 它取代了SDK应用程序中窗口函数WndProc 的地位 CFrameWnd类的对象是一个框架窗口 包括边框 标题栏 菜单 最大化按钮 最小化按钮和一个激活的视图 CFrameWnd支持SDI界面 对于MDI界面 使用其两个派生类CMDIFrameWnd和CMDIChildWnd CFrameWnd提供了若干个成员函数用于获得和设置活动文档 视图 图文框 标题栏 状态栏等操作 4 14 2020 WINDOWS程序开发讲师 鲍钰 34 CDocument和CView类CDocument类在应用程序中作为用户文档类的基类 它代表了用户存储或打开的一个文件 CDocument类的主要功能是把对数据的处理从对用户的界面处理中分离出来 同时提供了一个与视图类交互的接口 CDocument类支持标准的文件操作 如创建 打开和存储一个文档等 CView类是MFC中一个很基本的类 它作为其它MFC视图类和用户视图派生类的基类 4 14 2020 WINDOWS程序开发讲师 鲍钰 35 通用类 此类提供了许多通用服务 例如文件I O 诊断和异常处理等 此外还包括如数组和列表等存放数据集的类 4 14 2020 WINDOWS程序开发讲师 鲍钰 36 MFC中全局函数和全局变量 以Afx为前缀的函数 数据库类函数和DDX函数除外 和变量 在目前的版本中 都表示全局函数或全局变量 AfxAbort 无条件终止一个应用程序AfxBeginThread 创建一个新线程并执行它AfxEndThread 终止当前正在执行的线程AfxFormatString 格式化字符串AfxMessageBox 显示一个Windows消息框AfxGetApp 返回当前应用程序对象的指针AfxGetAppName 返回应用程序的名称AfxGetMainWnd 返回指向应用程序主窗口的指针AfxGetInstanceHandle 返回标识当前应用程序对象的句柄AfxRegisterWndClass 注册用于创建Windows窗口的窗口类 4 14 2020 WINDOWS程序开发讲师 鲍钰 37 例如调用AfxMessageBox函数将弹出一个消息框 其功能与CWinApp中的DoMessageBox相同 AfxMessageBox原型如下 intAfxMessageBox LPCTSTRlpszText UINTnType MB OK UINTnIDHelp 0 4 14 2020 WINDOWS程序开发讲师 鲍钰 38 intAfxMessageBox LPCTSTRlpszText UINTnType MB OK UINTnIDHelp 0 MB ABORTRETRYIGNOREMB OKMB OKCANCELMB RETRYCANCELMB YESNOMB YESNOCANCEL 4 14 2020 WINDOWS程序开发讲师 鲍钰 39 常用的三种工程 1 Win32ConsoleApplication 控制台应用程序 用于创建DOS控制台的C C 程序 WindowsDOS虚拟机下的DOS程序 简称DOS程序 2 Win32Application Windows应用程序 C或底层面向对象程序 用于创建的WindowsC API程序或MFCWindows程序 MFC MicrsoftFoundationClasses VC6 0预定了近二百三十个类 3 MFCAppWizard MFCWindows程序 用向导创建MFCWindows程序 并生成应用程序框架 即自动生成底层代码 编程时在原代码基础上增加新的应用代码即可 4 14 2020 WINDOWS程序开发讲师 鲍钰 40 用Win32ConsoleApplication创建DOS控制台程序 用Win32Application创建Windows程序1 创建WindowsAPI程序2 创建MFCWindows程序 4 14 2020 WINDOWS程序开发讲师 鲍钰 41 用MFCAppWizard创建MFCWindows程序该工程创建程序的类型 1 Dialogbased 2 SDI 3 MDI例 用MFCAppWizard创建SDI单文档面应用程序 并在客户区 100 100 处开始显示 Hello World 的字符串 见操作演示 目录MyMFC下例程 4 14 2020 WINDOWS程序开发讲师 鲍钰 42 创建第一个MFC程序 4 14 2020 WINDOWS程序开发讲师 鲍钰 43 Step1 4 14 2020 WINDOWS程序开发讲师 鲍钰 44 Step2 4 14 2020 WINDOWS程序开发讲师 鲍钰 45 Step3 4 14 2020 WINDOWS程序开发讲师 鲍钰 46 Step4 4 14 2020 WINDOWS程序开发讲师 鲍钰 47 Step5 4 14 2020 WINDOWS程序开发讲师 鲍钰 48 Step6 4 14 2020 WINDOWS程序开发讲师 鲍钰 49 Step7 4 14 2020 WINDOWS程序开发讲师 鲍钰 50 单文档应用程序创建的类 CAboutDlg对话框类CMyMFCApp应用程序类CMyMFCDoc文档类CMyMFCView视图类CMainFrame框架类 4 14 2020 WINDOWS程序开发讲师 鲍钰 51 4 14 2020 WINDOWS程序开发讲师 鲍钰 52 4 14 2020 WINDOWS程序开发讲师 鲍钰 53 尽管每个应用程序具体实现的功能不同 但同一类程序的基本结构是相同的 因此 通常采用MFCAppWizard创建一个MFC应用程序框架 MFC不仅仅是一个类库 它还提供了一层建立在MFC类对象封装上的附加应用程序框架 应用程序框架是为了生成一般的应用程序所必需的各种软组件的集成 类库只是一种可以嵌入到任何程序中的 提供某些特定功能的类的集合 而应用程序框架却定制了应用程序的结构和源代码 其中的类对象既相互独立 又相互作用 形成一个统一的整体 MFC应用程序框架 4 14 2020 WINDOWS程序开发讲师 鲍钰 54 MFC应用程序框架提供了构建应用程序所需要的类 在程序运行时能够生成运行时类的对象 如代表应用程序对象 文档对象 视图对象和框架窗口对象 应用程序对象theApp是一个唯一的全局变量 它的主要功能是通过调用WinMain 主函数启动程序的运行 MYMFC CPP中代码 CMyMFCApptheApp MFC应用程序框架也有一个作为程序入口点的WinMain 主函数 但在源程序中看不见该函数 它在MFC中已定义好并同应用程序相链接 应用程序框架中的对象 4 14 2020 WINDOWS程序开发讲师 鲍钰 55 在MFC应用程序的CWinApp派生类对象theApp是一个全局变量 代表了应用程序运行的主线程 它在程序整个运行期间都存在 它的销毁意味着运行程序的消亡 MFC应用程序启动时 首先创建应用程序对象theApp 这时将自动调用应用程序类的构造函数初始化对象theApp 然后由应用程序框架调用MFC提供的AfxWinMain 主函数 AfxWinMain 主函数首先通过调用全局函数AfxGetApp 获取应用程序对象theApp的指针pApp 然后通过pApp调用应用程序对象的有关成员函数 完成程序的初始化和启动工作 最后调用成员函数Run 进入消息循环 程序运行后将收到WM PAINT消息 调用OnPaint 函数绘制客户区窗口 如果Run 收到WM QUIT消息 则结束消息循环 然后调用函数ExitInstance 结束程序运行 MFC应用程序的生与死 4 14 2020 WINDOWS程序开发讲师 鲍钰 56 MFC应用程序运行后各函数的调用关系 InitInstance 函数是派生类唯一需要重载的函数 它负责应用程序的初始化 如初始化数据 创建文档模板 处理命令行以及显示应用程序主窗口 4 14 2
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 48263-2026医疗装备信息集成基础模型
- 初中英语教资面试答辩高频题库含答案
- 高中政治教资面试结构化易错题含答案
- 铁氧体元件成型工安全理论能力考核试卷含答案
- 燃气具制造工安全意识模拟考核试卷含答案
- 机场场务员创新实践测试考核试卷含答案
- 空调器零部件制作工操作技能水平考核试卷含答案
- 天然香料制备工操作安全模拟考核试卷含答案
- 矿山安全防护工风险识别模拟考核试卷含答案
- 变压器设备检修工岗前岗位操作考核试卷含答案
- 2026年10月广州市越秀区登峰街道办事处公开招聘出租屋管理员2人考试备考试题及答案解析
- 《家禽养殖》课件
- 三年级数学应用题100道(含答案)
- Linux红帽培训课件
- 《读书:目的和前提》《上图书馆》联读 课件统编版高中语文必修上册
- 装配式建筑装饰装修技术 课件 模块五 装配式隔墙
- 古代历史小说鉴赏与分析
- 期末复习-世界当代史
- YY 0286.1-2019专用输液器第1部分:一次性使用微孔过滤输液器
- 消防安全主题班会课件(共17张ppt)
- 班组管理和沟通技巧培训课件
评论
0/150
提交评论