第五章MFC类库-PPT精选
vc++MFC基础教程
1.2.3 编辑区
• 在Visual C++中,编写应用程序代码的位置就是编辑区。该编辑区的 功能十分强大,智能化程度也非常高。在编辑区内,除了能编写 C/C++语言外,还能编写SQL、HTML和VBScript等其他编程语言。 如下图所示。
1.2.4 联机帮助
• Visual C++6.0不像其他集成开发环境一样把帮助系统集成在开发环境 内部,而是提供了一个专门为Visual C++设计的MSDN类库。MSDN 虽然是一个独立的帮助系统,但却能很好地和Visual C++6.0集成在一 起。 • MSDN的使用方式有以下几种: • 单击【Help】|【Contents】命令; • 单击【Help】|【Search】命令; • 单击【Help】|【Index】命令; • 按下【F2】键。 • 通过上述几种命令方式,即可运行MSDN。
1.2.1 工作区窗口和输出窗口
• Find in Files 1和Find in Files 2:两个选项卡的作用相同,用于显示 从多个文件中查找字符串的结果。当用户想要查看某个函数或变量出 现在哪些文件中,单击【Edit】|【Find in Files】命令,弹出【Find in Files】对话框,如下图所示。在【Find in Files】对话框中的 【Find what】后的编辑框中,输入想要查找的内容,单击【Find】按 钮即可。查找到的内容会输出到Find in Files选项卡中。
第1章 Visual C++集成开发环境
• Visual C++是一个功能强大的可视化应用程序开发工具。其凭借强大 功能,受大了广大程序员的欢迎。当今流行的Visual C++的开发工具 是6.0版本。下面来介绍Visual C++ 6.0的一些基本情况。
微软基础类库(MFC)
M F CMFC(Microsoft Foundation Classes),是一个微软公司提供的类库(class libraries),以C++类的形式封装了Windows的API,并且包含一个应用程序框架,以减少应用程序开发人员的工作量。
其中包含的类包含大量Windows句柄封装类和很多Windows的内建控件和组件的封装类。
① MFC简介:MFC,微软基础类(Microsoft Foundation Classes),同VCL类似,是一种应用程序框架,随微软Visual C++ 开发工具发布。
目前最新版本为10.0(截止2011年3月),并且发布了中文版。
该类库提供一组通用的可重用的类库供开发人员使用。
大部分类均从CObject 直接或间接派生,只有少部分类例外。
MFC 应用程序的总体结构通常由开发人员从MFC类派生的几个类和一个CWinApp类对象(应用程序对象)组成。
MFC 提供了MFC AppWizard 自动生成框架。
Windows 应用程序中,MFC 的主包含文件为"Afxwin.h"。
此外MFC的部分类为MFC/ATL 通用,可以在Win32 应用程序中单独包含并使用这些类。
由于它的易用性,初学者常误认为VC++开发必须使用MFC。
这种想法是错误的。
作为Application Framework,MFC的使用只能提高某些情况下的开发效率,只起到辅助作用,而不能替代整个Win32 程序设计。
② MFC特点:MFC实际上是微软提供的,用于在C++环境下编写应用程序的一个框架和引擎,VC++是Windows下开发人员使用的专业C++ SDK(SDK,Standard SoftWare Develop Kit,专业软件开发平台),MFC就是挂在它之上的一个辅助软件开发包,MFC作为与VC++血肉相连的部分(注意C++和VC++的区别:C++是一种程序设计语言,是一种大家都承认的软件编制的通用规范,而VC++只是一个编译器,或者说是一种编译器+源程序编辑器的IDE,WS,PlatForm,这跟Pascal 和Delphi的关系一个道理,Pascal是Delphi的语言基础,Delphi使用Pascal规范来进行Win下应用程序的开发和编译,却不同于Basic语言和VB的关系,Basic语言在VB开发出来被应用的年代已经成了Basic语言的新规范,VB新加的Basic语言要素,如面向对象程序设计的要素,是一种性质上的飞跃,使VB既是一个IDE,又成长成一个新的程序设计语言),MFC 同BC++集成的VCL一样是一个非外挂式的软件包,类库,只不过MFC类是微软为VC++专配的..MFC是Win API与C++的结合,API,即微软提供的Windows下应用程序的编程语言接口,是一种软件编程的规范,但不是一种程序开发语言本身,可以允许用户使用各种各样的第三方(如我是一方,微软是一方,Borland就是第三方)的编程语言来进行对Windows下应用程序的开发,使这些被开发出来的应用程序能在Windows下运行,比如VB,VC++,Java,Delhpi编程语言函数本质上全部源于API,因此用它们开发出来的应用程序都能工作在Windows的消息机制和绘图里,遵守Windows作为一个操作系统的内部实现,这其实也是一种必要,微软如果不提供API,这个世上对Windows编程的工作就不会存在,微软的产品就会迅速从时尚变成垃圾,上面说到MFC是微软对API函数的专用C++封装,这种结合一方面让用户使用微软的专业C++ SDK来进行Windows下应用程序的开发变得容易,因为MFC是对API的封装,微软做了大量的工作,隐藏了好多程序开发人员在Windows下用C++ & MFC编制软件时的大量内节,如应用程序实现消息的处理,设备环境绘图,这种结合是以方便为目的的,必定要付出一定代价(这是微软的一向作风),因此就造成了MFC对类封装中的一定程度的的冗余和迂回,但这是可以接受的..最后要明白MFC不只是一个功能单纯的界面开发系统,它提供的类绝大部分用来进行界面开发,关联一个窗口的动作,但它提供的类中有好多类不与一个窗口关联,即类的作用不是一个界面类,不实现对一个窗口对象的控制(如创建,销毁),而是一些在Windows(用MFC编写的程序绝大部分都在Windows中运行)中实现内部处理的类,如数据库的管理类等,学习中最应花费时间的是消息和设备环境,对C++和MFC的学习中最难的部分是指针,C++面向对象程序设计的其它部分,如数据类型,流程控制都不难,建议学习数据结构C++版。
MFC各类库详解
1.MFC概述1.MFC是一个编程框架MFC (Microsoft Foundation Class Library)中的各种类结合起来构成了一个应用程序框架,它的目的就是让程序员在此基础上来建立Windows下的应用程序,这是一种相对SDK来说更为简单的方法。
因为总体上,MFC框架定义了应用程序的轮廓,并提供了用户接口的标准实现方法,程序员所要做的就是通过预定义的接口把具体应用程序特有的东西填入这个轮廓。
Microsoft Visual C++提供了相应的工具来完成这个工作:AppWizard可以用来生成初步的框架文件(代码和资源等);资源编辑器用于帮助直观地设计用户接口;ClassWizard用来协助添加代码到框架文件;最后,编译,则通过类库实现了应用程序特定的逻辑。
1.封装构成MFC框架的是MFC类库。
MFC类库是C++类库。
这些类或者封装了Win32应用程序编程接口,或者封装了应用程序的概念,或者封装了OLE特性,或者封装了ODBC和DAO数据访问的功能,等等,分述如下。
(1)对Win32应用程序编程接口的封装用一个C++ Object来包装一个Windows Object。
例如:class CWnd是一个C++ window object,它把Windows window(HWND)和Windows window有关的API函数封装在C++ window object的成员函数内,后者的成员变量m_hWnd就是前者的窗口句柄。
(2)对应用程序概念的封装使用SDK编写Windows应用程序时,总要定义窗口过程,登记Windows Class,创建窗口,等等。
MFC把许多类似的处理封装起来,替程序员完成这些工作。
另外,MFC提出了以文档-视图为中心的编程模式,MFC类库封装了对它的支持。
文档是用户操作的数据对象,视图是数据操作的窗口,用户通过它处理、查看数据。
(3)对COM/OLE特性的封装OLE建立在COM模型之上,由于支持OLE的应用程序必须实现一系列的接口(Interface),因而相当繁琐。
MFC各类库详解
1.MFC概述1.MFC是一个编程框架MFC (Microsoft Foundation Class Library)中的各种类结合起来构成了一个应用程序框架,它的目的就是让程序员在此基础上来建立Windows下的应用程序,这是一种相对SDK来说更为简单的方法。
因为总体上,MFC框架定义了应用程序的轮廓,并提供了用户接口的标准实现方法,程序员所要做的就是通过预定义的接口把具体应用程序特有的东西填入这个轮廓。
Microsoft Visual C++提供了相应的工具来完成这个工作:AppWizard可以用来生成初步的框架文件(代码和资源等);资源编辑器用于帮助直观地设计用户接口;ClassWizard用来协助添加代码到框架文件;最后,编译,则通过类库实现了应用程序特定的逻辑。
1.封装构成MFC框架的是MFC类库。
MFC类库是C++类库。
这些类或者封装了Win32应用程序编程接口,或者封装了应用程序的概念,或者封装了OLE特性,或者封装了ODBC和DAO数据访问的功能,等等,分述如下。
(1)对Win32应用程序编程接口的封装用一个C++ Object来包装一个Windows Object。
例如:class CWnd是一个C++ window object,它把Windows window(HWND)和Windows window有关的API函数封装在C++ window object的成员函数内,后者的成员变量m_hWnd就是前者的窗口句柄。
(2)对应用程序概念的封装使用SDK编写Windows应用程序时,总要定义窗口过程,登记Windows Class,创建窗口,等等。
MFC把许多类似的处理封装起来,替程序员完成这些工作。
另外,MFC提出了以文档-视图为中心的编程模式,MFC类库封装了对它的支持。
文档是用户操作的数据对象,视图是数据操作的窗口,用户通过它处理、查看数据。
(3)对COM/OLE特性的封装OLE建立在COM模型之上,由于支持OLE的应用程序必须实现一系列的接口(Interface),因而相当繁琐。
《MFC系列教程》PPT课件
CObjeck
各类结构图
CCmdTarget
命令消息目标类
CDocument 线程类
CObject
CCmdTarget CWnd
CFrameWnd
CObject CCmdTarget
CWinThreat CWinApp
CObject CCmdTarget
CWnd
23
CView
文档类主要管理应用程序中的数据。不管理物理磁盘输入输 出。
文件: DrawView.h
DrawView.cpp
视图类主要管理应用程序中的视图窗口,显示文档类的数据.
功能:显示文档类的数据,处理用户输入,管理窗口,实现图
形系统时,屏上显示,打印机上打印图形。
函数:
获得文档指针的函数 GetDocument ( )
绘图函数
OnDraw ( )
修改窗口函数
PreCreateWindow( )
Ⅰ. MFC概述
MFC是用来编写应用程序的C++类集,该类集以层次结构组 织起来,其中封装了大部分API函数与控件,功能包含整个系统, 提供了丰富的图形环境下的框架。
2
1. MFC 发展过程 1992年 MFC1.0应用程序中非图形的类和应用程序图形用户 界面类。 1993年 MFC2.0增加了一些构造类。 1993年 MFC2.5增加数据库类、基于16位应用程序。 1994年 MFC3.0增加开发32位应用程序的类,提供了丰富的用户 界面程序支持。 1994年 MFC4.0增加新的控件,支持OLE(对象连接嵌入)类扩展 功能。实现网络通信程序的编写。提供了MAPI接口,开发邮件、消 息处理的应用程序。 1997年 MFC4.21增强了对数据库程序的支持,出现了 visual c+3 +5.0
MFC各类库详解
1.MFC概述1.MFC是一个编程框架MFC (Microsoft Foundation Class Library)中的各种类结合起来构成了一个应用程序框架,它的目的就是让程序员在此基础上来建立Windows下的应用程序,这是一种相对SDK来说更为简单的方法。
因为总体上,MFC框架定义了应用程序的轮廓,并提供了用户接口的标准实现方法,程序员所要做的就是通过预定义的接口把具体应用程序特有的东西填入这个轮廓。
Microsoft Visual C++提供了相应的工具来完成这个工作:AppWizard可以用来生成初步的框架文件(代码和资源等);资源编辑器用于帮助直观地设计用户接口;ClassWizard用来协助添加代码到框架文件;最后,编译,则通过类库实现了应用程序特定的逻辑。
1.封装构成MFC框架的是MFC类库。
MFC类库是C++类库。
这些类或者封装了Win32应用程序编程接口,或者封装了应用程序的概念,或者封装了OLE特性,或者封装了ODBC和DAO数据访问的功能,等等,分述如下。
(1)对Win32应用程序编程接口的封装用一个C++ Object来包装一个Windows Object。
例如:class CWnd是一个C++ window object,它把Windows window(HWND)和Windows window有关的API函数封装在C++ window object的成员函数内,后者的成员变量m_hWnd就是前者的窗口句柄。
(2)对应用程序概念的封装使用SDK编写Windows应用程序时,总要定义窗口过程,登记Windows Class,创建窗口,等等。
MFC把许多类似的处理封装起来,替程序员完成这些工作。
另外,MFC提出了以文档-视图为中心的编程模式,MFC类库封装了对它的支持。
文档是用户操作的数据对象,视图是数据操作的窗口,用户通过它处理、查看数据。
(3)对COM/OLE特性的封装OLE建立在COM模型之上,由于支持OLE的应用程序必须实现一系列的接口(Interface),因而相当繁琐。
第五章 MFC基础
MFC类的组织结构
CObject类是MFC中多数 类和用户自定义子类的 根类,是抽象基类。它 提供了许多编程所需的 公共操作。
对象的建立 对象的删除
串行化支持 (Serialization)
运行时信息 对象诊断输出
绘图和打印类
输出(设备相关)类 绘图工具类
4
应用程序体 系结构类
MFC类的组织结构
创建Windows 窗口要分两 步进行
引入构造函数,构 造一个CWnd对象
调用Create建立Windows窗 口,并将它连到CWnd对象上
2.视图类:CView类
表示框架窗口的客户区和显示文档数据并接收输入的客户区, 其派生类主要有如下几种: CScrollView:具有滚动功能的视图的基类 CFormView:其布局在对话资源中定义的滚动视图 CEditView:具有文本编辑、查找、替换和滚动功能的视图
应用程序和线程支持类 命令相关类 文档类 文档模板类 视图类(体系结构) 框架窗口(体系结构)
简单数据类型类
数组、列表和映射类
窗口、对话 框和控件类
框架窗口类(窗口) 视图类(窗口) 对话框类 控件条类
数组类 列表类 映射类
文件和数据库类
文件I/O类 DAO类 ODBC类
Database Access Object (DAO)类提供了比ODBC 类更广泛的支持
12
可视对象类
7.绘画对象类:CGdiObject类
图形绘画对象子层次结构以CGdiObject类为根类,可用于建 立绘画对象模型,如画笔、刷子、字体、位图、调色板等。
8.设备描述表类:CDC类
该类及其子类支持设备描述表对象,是CObject类的子类。 CDC类是一个较大的类,包括许多成员函数,如映射函数、 绘画工具函数、区域函数等,通过CDC对象的成员函数可以 完成所有的绘画工作
VC MFC学习课件第五章
5.2.1 编辑器设计菜单
使用键盘快捷键
(1)先打开上例的项目工作区窗口中Accelerator 的资源项,双击IDR_MAINFRAME,如图。
最下端的空行
ห้องสมุดไป่ตู้12
5.2.1菜单
(2)要建立一新的加速键,双击加速键列表的最 下端的空行,如图,其中可设置的属性如表 (3)在上述对话框中,选择在Ex_Sdi示例中添加 的“成绩输入”菜单项的ID号ID_SCORE_IN作为 要联用的加速键的ID号,单击[Next Key Typed], 按下Ctrl+1作为此加速键的键值。
菜单项被拖动的位置
图6.5 添加的菜单项
9
5.2.1 编辑器设计菜单
菜单命令的消息映射
[例Ex_Mmenu]“成绩输入”菜单项的映射。
(1)选择“View”菜单 “ClassWizard”命令项或按Ctrl+w 快捷键,则出现MFC ClassWizard对话框,切换到Message Maps页面。 (2)从“Class name”列表中选择CMainFrame,在IDs列表中 选择ID_SCORE_IN,然后在Messages框中选择 COMMAND消息,如图。
第5讲 菜单、工具栏和状态栏 讲 菜单、
1
文档应用程序框架
VC的MFC库支 VC的MFC库支 持三种不同的 应用程序 单文档界面(SDI) 单文档界面(SDI) 多文档界面(MDI) 多文档界面(MDI) 基于对话框的应用程序 SDI的应用程序 SDI的应用程序 只有一个窗口 MDI的应用程序每次 MDI的应用程序每次 可以读写多个文件或 文档, 文档,可同时对多个 文档进行操作, 文档进行操作,可以 有多个子窗口
菜单的基本操作
MFC程序设计PPT课件
例 bIsValid ChText,ChGrade cString CsName DwFlags fnSort hWnd,hPen iCount pFrame szName m_szName
3.1.3 应用程序框架介绍
MFC提供了构造Windows应用程序的框架,它不 仅为应用程序建立标准的结构,生成一系列起动文 件,还提供标准的图形用户界面如菜单、工具栏、 状态条等供开发人员在程序中补充完善,开发人员 只需要完成针对特定应用的代码。使用应用程序框 架的应用程序代码小,运行速度快,它提供的工具 也降低了编码的难度。
3. 全局变量 全局变量名以afx开头,如afxTraceFlag、 afxDump等,主要与异常处理有关。
3.1.2 MFC命名规则
匈牙利命名法规定: • 变量名以一个或多个小写字母开头作为前 缀,标识变量的数据类型; • 类型标识后是若干个单词,标识变量含义, 每个单词以大写字母开头,其余字母小写;
• MFC中所有类及自定义类都以C开头; • 类成员变量以m_为前缀,下划线后是变 量名等等。
前缀 B,b Ch c Cs Dw fn
h i p sz m_
表3.1 命名规则
数据类型 BOOL char class CString DWORD function handle int pointer ASCII string Data member
1.文档-视图结构
文档视图结构提供一种连续处理数据的方式,使 应用程序的数据与数据的显示分开处理。
程序的数据储存在文档类中(作为文档类的数据成员),是 对数据的抽象表示。数据显示由视图负责,视图是程序窗 口的客户区,框架窗口是客户区的框架,程序数据显示在 窗口,用户通过视图与程序交互。
第五章 类的继承与派生
//save as car.h #include "vehicle.h" class car : public vehicle { //派生类car(轿车) public: void setcar(int aw, int ats, float ap, int anc, int ahp) {setvehicle(aw,ats,ap); //调用基类的函数初始化 numbercylinders=anc; horsepower=ahp; } void print( ) { //重定义print( ) vehicle::print( ); //调用基类的函数 cout << "\n cylinders:" << numbercylinders; cout << "\n horsepower:" << horsepower;} private: int numbercylinders; //汽缸数 int horsepower; //马力 };
子类特有的部分
子类名
public、protected 和 private分别表示公有继承、保护 继承和私有继承,定义派生类时三选一。
7
第五章 类的继承与派生
(3)说明 ①public继承 最常见的派生方式。基类成员的访问权限在派生类中保 持不变,派生类成员函数不可直接访问基类的private成员, 可通过基类的公有成员函数或保护成员函数访问。 ②private继承 基类中的所有成员在派生类中都将变为private成员。 派生类成员函数不可直接访问基类的private成员,但可直 接访问基类的public、protected成员,并通过它们访问基 类的private成员。 ③protected继承 基类的public成员在派生类中变为protected成员,基类 的protected和private成员在派生类中保持原来的访问权限。 8
MFC原理(PPT)
采用MFC编程的优点: 编程的优点: 采用 编程的优点 使用标准化的程序代码结构,有利于程序员之 间的交流. Visual C++为MFC提供了大量的工具支持,提高 了编程效率.如利用MFC AppWizard创建MFC 应 用 程 序 框 架 , 利 用 ClassWizard 方 便 地 对 Windows消息进行管理. MFC 应 用 程 序 的 效 率 较 高 , 只 比 传 统 的 Windows C程序低5%左右.并且,在MFC应用 程序中还允许混合使用传统的Windows API函数. 其它优势:完全支持Windows所有的函数,控件, 消息,菜单及对话框;具有良好的稳定性和可 移植性,更符合微软的风格等.
6.2.2 MFC体系结构 体系结构 MFC主要组成部分:类,宏和全局函数. 类是MFC中最主要的内容.MFC类是以层次结 构方式组织起来的.MFC中的类分成两部分,除 了一些辅助类,大多数的MFC类是直接或间接从 根类CObject派生而来. 几乎每一个派生层次都与一具体的Windows实例 相对应,如文档类,窗口类和视图类等. MFC宏主要功能:消息映射,运行时对象类型服 务,诊断服务,异常处理. MFC约定:全局函数以"Afx"为前缀,全局变量 以"afx"为前缀.
Mfc42UD.lib MfcO42D.lib MfcD42D.lib Nafxcw.lib NafxcwD.lib gdi32.lib user32.lib kernel32.lib msvcrt.lib msvcrtd.lib libcmt.lib libc.lib
MFCxxUD.DLL的导入函数库(Unicode Debug版) MFCOxxD.DLL的导入函数库(OLE Debug版) MFCDxxD.DLL的导入函数库(Database Debug版) MFC静态链接库(Release版) MFC静态链接库(Debug版) GDI32.DLL的导入函数库 USER32.DLL的导入函数库 KERNEL32.DLL的导入函数库 MSVCRT.DLL(C运行函数库)的导入函数库 MSVCRTD.DLL(Debug版C运行函数库)的导入函数库 C运行函数静态链接库(多线程) C运行函数静态链接库(单线程)
mfc课件
福建农林大学 李丽珊
•建立程序框架
• 使用MFC AppWizard 可以创建基于MFC的Windows 应用程序 • MFC AppWizard 显示一系列对话框,引导用户逐步 建立起应用程序的框架和设置程序的基本选项。 • MFC AppWizard 会自动生成应用程序所需的基本文 件,包括程序源文件、头文件、资源文件和项目文件 等。 • MFC AppWizard只为用户建立程序框架,例如程序的 基本界面,具体操作代码仍需要用户自己编写。
福建农林大学 李丽珊
目的要求
理解 MFC的类体系结构和关键技术
具有可视化界面的面向对象系统 开发方法;使用UML进行面向对 象系统的设计;
掌握
熟悉
MFC的类体系和关键技术;
了解
命名空间、UML语言基础 及简单应用。
福建农林大学 李丽珊
8.1 MFC基础和VC可视化开发基础
8.1.1 MFC的类体系
基类Cobject提供的最基本功能有: 1. 支持序列化(serialization)。序列化指如何让一个对象保持持 久不变,即把对象成员数据内容存入一个文件或从一个文件中 读取内容重构对象的过程。 2. 运行时(Run-time)类的信息获取。 3. 提供特定的new,delete和=操作符,完成对象的建立与删除。 福建农林大学 李丽珊
福建农林大学 李丽珊
福建农林大学 李丽珊
• 在项目工作区可以看到,MFC AppWizard创建 了CAboutDlg、CHelloApp、CHelloDoc、 CHelloView和CMainFrame 五个类。这时,我 们可以建立并运行这个程序,选择Build 菜单下 的!Executive hello.exe 选项,运行结果如图所 示。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
CMiniFrameWnd ……
CEdit CStatic CListBox
CCtrlView CScrollView
CView CDialog
CCFileDialog CColorDialog
CDocument CDocItem
CFontDialog ……
……
可视化编程语言,王继尧
CEditView CListView CRichEditView CTreeView CFormView
… //}}AFX_VIRTUAL
2019/10/13
可视化编程语言,王继尧
17
2.消息映射声明标记
//{{AFX_MSG(类名)
…
//}}AFX_MSG
3.消息映射起止标志
BEGIN_MASSAGE_MAP(参数1,2)
…
END_MASSAGE_MAP()
4.实时运行类
RUN_TIME_CLASS()
视图类的作用是将文稿中的内容进行显示。 视图类的对象在创建时已经被规定用来显示哪 份文稿。如何显示(用文字还是用图、大字还 是小字、红粉笔还是白粉笔)是由视图类对象 决定的。MDI情况下,情况复杂得多,如两份 文档,其中一个创建了五个视图类对象,另一 份创建了三个,则共有八个视图对象,创建了 八个子框架对象。
5.消息映射(ON_COMMAND(消息代码,函
数)) 2019/10/13
可视化编程语言,王继尧
18
6.映射变量声明标记 //{{AFX_DATA(类名)
… //}}AFX_DATA 7.映射变量初始化标记 //{{AFX_DATA_INIT(类名) … //{{AFX_DATA_INIT 8.映射变量与控件之间的映射宏 AFX_DATA_MAP(类名) //…DDX AFX_DATA_MAP
资源文件RES
Windows,运行 库和MFC库
2019/10/13
链接程序
可视化编程语言,王继尧
可执行文件EXE
8
一、基本程序框架类
常用MFC应用程序包括四个类:文档类、 视图类、主框架窗口类和应用类。
文档类:C***Doc,其中.h用来存放类、结构 等的定义代码,.cpp用来存放类的成员函数的 实际代码。
CDaoRecordView CRecordView
3
第一节 什么是MFC
一、应用程序框架
MFC是一种称为应用程序框架的软件的组
成部分。要理解应用程序框架,就要回顾一下
用C语言编写Windows应用程序的全过程。
首先要编写一个含有WinMain()的源代码
模块,还要编写初始化应用程序的代码,接下
来是消息循环,其次是注册窗口类(使用
据和公式构成的一张表,有两个视窗,一个是
数据的图形显示(数字的行列),另一种是这
些数字的统计图。也就是说,一个文档有两种
视窗方式(一个表和一个图形),如果改变了
表格视窗中的数字,则文档就能自我更新,并
通知视窗显示新的数据。
2019/10/13
可视化编程语言,王继尧
11
假定有一些文稿、一块黑板、一些工具盒, 由这些组成了一个工作环境,则文档类创建的 对象负责文稿的管理工作,每个对象负责一份 文稿的管理。SDI中只有一份文稿,只需要一 个文档对象,MDI中可以有多份文稿,需要多 个文档对象来管理,每个对象仍只能管理一份 文稿。
文档模板是由CDocTemplate类定义的。 它是一个抽象基类,不能直接使用,但可以把 文档模板定义为它的派生类。文档模板也用来 定义文档类、视窗类和主窗口类的关系。
2019/10/13
可视化编程语言,王继尧
21
视窗由CView类管理。CView类是基本视 窗类,还有其它的视窗类,如CScrollView, 是一个借助滚动条来滚动内容的视 窗;CEditView是一个带有剪切/粘贴/拷贝功能 的文本编辑视窗。当用户与应用程序进行交互 作用时,用户在视窗中看到的是视窗图形。若 用户改变窗口的内容,这些修改通常返回文档 进行更新。
2019/10/13
可视化编程语言,王继尧
10
例如在一个文本编辑器中的文档就是待处理
的数据(文本),视窗显示文档的内容,它看
起来很象一个窗口。但是,在多文档程序中
(如Excel),同样的数据可能有多个视窗,
而且,由于文档知道如何与视窗交流,如果改
变了一个视窗中的内容,同一文档的其它视窗
也会改变。在电子表格中,它的文档仅是由数
2019/10/13
可视化编程语言,王继尧
20
CDoucument是由应用程序建立的任何文 档都可使用的类,它为所有的文档提供了最基 本的功能,包括建立、装入、存储。文档不能 由用户直接修改,文档的改变是由视窗传送的。 视窗知道与它们连接的文档,文档知道当前处 于有效状态的视窗。文档也使用一种称为文档 模板的抽象类确定文档要使用的资源(图标)。
2019/10/13
可视化编程语言,王继尧
13
三、文档-视图结构的常用成员函数
CDocument::OnNewDocument: 从“文
件”菜单中选择打开和新建时被调用。该函数
调用DeleteContents来清除文档中的数据
CDocument::UpdateAllViews( )
CDocument::Serialize( )
黑板用来显示文档的内容,框架类的对象负 责黑板的管理工作。一个主框架类的对象负责 摆放粉笔盒的位置(工具条、菜单、状态条等 的布置)。同时主框架对象又能在自己管辖范 围内划出一块区域(窗口)交给子框架对象
2019/10/13
可视化编程语言,王继尧
12
管理,子框架对象把管理的窗口划出一部分给 视图使用。
201创9/10/建13 应用类的对可象视化T编程h语e言A,王p继p尧 (唯一全局对象1)6
(2)程序入口函数WinMain接收控制 定义对象TheApp后,控制权交给
WinMain。 (3)调用InitInstance函数进行初始化 四、其他代码含义 1.虚函数重载标记
//{{AFX_VIRTUAL(类名)
代码。
2019/10/13
可视化编程语言,王继尧
5
实际上,应用程序框架完成两项功能:首先
定义了一个应用程序的初始行为;其次为调用
Windows API提供了一个基于类的接口。
二、MFC的主要作用
1.MFC是以C++类的形式提供的;
2.提供了编写Windows应用程序的的编程基
础和
许多高级函数;
3.MFC支持多种应用程序界面;
第二节 MFC程序基本框架类及文件组成
在认识应用程序框架之前,先来VC++的应 用程序创建过程
2019/10/13
可视化编程语言,王继尧
7
VC++
代码编译
资源编译
Windows 头文件
源文件
Resource.h 运行时头文件
MFC头文件
资源脚本 文件.RC
位图、图标 和其它资源
资源编译器
编译器 OBJ文件
与文档连接的时候调用 CView::OnDraw( ) CView::OnUpdate( )通知试图文档已更改
上面函数中的GetDocument、 UpdateAllViews OnUpdate OnInitialUpdate来完成文档与视图的交互
2019/10/13
可视化编程语言,王继尧
15
三、MFC应用程序的执行步骤分析 一般的MFC程序运行的主要步骤是:
应用类:完成其它工作如初始化程序和清除。
二、MFC的文档-视图结构
有必要对MFC使用的文档/视图
(Document/ View)体系作些解释。大多数应
用程序框架都使用这种体系。
在文档/视图体系中,应用程序处理的不是
窗口,而是文档。文档就象类一样,它知道如
何从文件读写、如何更新、如何同视图交流。
视图就是显示文档的类。
2019/10/13
可视化编程语言,王继尧
19
第三节 MFC类概述
1.CObject类及其它核心类 除了少数杂类外,MFC库中的类都是从
CObject类派生的,称为诸类之母。 该类在 afx.h文件中定义,主要提供一些公用操作, 如对象的建立和删除、串行化支持、对象诊断 输出、运行信息等。
当用MFC创建一个程序时,可以创建一个 由CWinApp派生的类。有了它,用户就不必 编写WinMain(),因为它隐藏在MFC中。
视图类:C***View,负责显示文档类的数据 (可在屏幕、打印机或其它输出设备上显示)、 处理用户输入。
框架类:包括CMainFrame和CChildFrame。
2019/10/13
可视化编程语言,王继尧
9
主框架窗口类用来显示标题、菜单条、系统菜
单、工具条、状态条等,子框架窗口只能在主
框架窗口内显示,共享其菜单。
该函数一般需要在文档子类中重载
void SXXXDoc::Serialize(CArchive&ar)
{ if(ar.IsStoring())
{//向文件中写数据( ar<< )}
else {//从文件中读数据(ar>>)}
}
2019/10/13
可视化编程语言,王继尧
14
三、文档-视图结构的常用成员函数 CView::GetDocument() CView::OnInitialUpdate(): 当视图第一次
还要记住很多规则。例如使用
CreateBitmap()创建一个位图,用
DeleteObject()来取消它,而且必须保证