MFC基本框架
来源:互联网 发布:kettle 大数据 编辑:程序博客网 时间:2024/06/08 17:35
MFC 应用程序框架
1、 MFC 简介:
MFC ( Microsoft Foundation Class )是由微软公司编写的一套专门用于 Windows 编程的 C++ 基础类库, VC++ 编程基本上都是围绕着 MFC 类库来进行的。它封装了 Windows API 的绝大多数功能,为用户开发 Windows 应用程序建立了一个非常灵活的应用程序框架。
CObject 是 MFC 类库的根类。
MFC 类库包括:
(1)CCmdTarget 类:是 CObject 类的子类,它是 MFC 库中所有具有消息映射属性的类的公共基类。它的子类有 CWinThread 类, CWnd 类、 CDocument 类,从 CCndTarget 类派生的类能在程序运行时动态创建对象,并处理命令消息。
(2) CWinThread 类:是 CCmdTarget 的子类。 CWinThread 是所有线程类的基类,封装了应用程序操作的多线程功能。应用程序类 CWinApp 是 CWinThread 的子类,封装了初始化、运行、终止应用程序的代码。
(3) CWnd 类:窗口类,是 CcmdTarget 类的子类,从 CWnd 派生的类可以拥有自己的窗口,并对它进行控制。窗口框架类 CFrameWnd 和 CView 类是 CWnd 的子类,前者创建和维护窗口的边框、菜单栏、工具栏、状态栏,负责显示和搜索用户命令,后者负责为文档提供一个或几个视图。视图的作用是为修改、查询文档等任务提供人机交互的界面。
(4) 文档类 CDocument 类:是 CCmdTarget 类的子类,负责封装和维护文档。文档包括应用程序的工作成果或环境设置数据等,可以是程序需要保存的任何内容。
一个 MFC 应用程序并不直接操作上述类,而是以上述类为基类派生新的类,构建 Windows 应用程序的基本框架。
2、构建 Windows 应用程序的基本类
当你创建了一个名为 Exam1_1 的 MFC 应用程序时,就创建了必要的类。
(1) 应用程序类: CExam1_1App 类
该类是代表应用程序,它的基类是 CWinApp 代表了 Windows 应用程序,并把每一个程序都看做一个对象。应用程序类将负责完成 MFC 一些应用程序的一些例行初始化工作。另外 CWinApp 的的基类是 CwinThread ,因此它也要管理工序主线程的运行。
AppWizard 声明了一个由 CwinApp 继承的类 Cexam1_1App ,在类的实现文件中包含:
? 应用程序的消息映射。
? 一个空的应用程序类的构造函数。
? 一个 Cexam1_1APP 类的全局对象 theApp 。
? 一个 InitInstance 函数的标准定义。
全局对象 theApp 在 WinMain() 函数执行之前已经初始化, 进入 MFC 版本的 WinMain() 函数后, theApp 很快获得了管理权,进行 Windows 程序的一些例行初始化工作。
CwinApp 类中可重载的成员函数有:
InitInstance() 函数:负责应用程序的初始化工作,创建文档模板、文档、视图和主窗口,该函数是唯一一个必须重载的函数。
Run() 初始化结束后,由 WinMain() 函数调用处理消息循环,一个文档 / 视图应用程序绝大多数时间处于 Run() 函数的执行过程中。
ExitInstance() 函数:当用户退出程序时,该函数被调用。
OnIdle() 函数:当没有窗口消息需要处理时由窗口框架调用,通常用于执行后台任务。
(2) 主框架类: CMainFrame
CmainFrame 代表的是程序懂得主框架窗口,一个 Windows 应用程序除了白色部分的视图外,程序的主窗口的其他部分都归 CMAinFrame 管理。
单文档程序的主框架窗口是在调用 ProcessShellCommand() 函数时创建的,在主框架窗口创建之前, CmainFrame::PreCreateWindow() 函数将被自动调用。在这个函数中可以更改主框架窗口的风格,或者对窗口类的一些属性进行修改,此时窗口句柄还不可用。
当 Windows 通过 Win32 函数 CreateWindowEx() 接收到创建主框架窗口的请求时,它会在系统内部为窗口分配资源,并进行一些设置工作,此时窗口句柄就可以使用了,当 Windows 从 CreateWindowEx() 函数返回之前,它向程序发送 WM_CREATE 消息,让程序完成一些必要的初始化工作, CMainFrame::OnCreate() 函数就是 WM_CREATE 消息的处理函数,这个函数首先调用了基类 Cframewrd 的处理函数,让基类完成初始化工作,然后为主框架窗口创建工具栏和状态栏。
CmainFrame 的两个成员变量 m_wndToolBar 和 m_wndStatusBar 分别对应着程序主窗口中的工具栏和状态栏。 CToolBar::LoadToolBar() 函数负责装载工具栏资源,而 CToolBar::CreateEx() 函数负责工具栏的创建。状态栏的使用需要一个数组来定义状态栏类各个窗格的 ID ,这个数组就是 indicators 。 CstatusBar::Create() 函数负责状态栏的创建, CstatusBar::SetIndicators() 函数负责设置状态栏上的窗格。
? 文档 / 视图结构
文档 / 视图结构是 MFC 应用程序最核心的概念,它将应用程序的数据和浏览、操作数据的方法分离。换句话,文档对象通常代表一个已经打开的文件,而视图对象表示文档中的数据的可视化表示,并提供可视化交互界面允许用户查看、编辑数据。
? 文档 / 视图结构:
应用程序的数据存储在文档对象中,并可以显示在视图。文档与视图的关系是 1 对多的关系。一个 MFC 应用程序开始运行后,应用程序负责传递消息到窗口框架对象和视图对象。文档对象负责管理数据,视图对象按特定的方式反映当前文档对象中数据,视图和框架同时提供可视化的界面与用户实现交互,用户使用鼠标和键盘操作应用程序的菜单、工具栏及控件,发出命令消息,输入消息,应用程序接收消息,接收输入消息,并以预先定义的方式响应用户的操作。
(3) 文档类
应用程序中的文档类是 CDocument 类的派生类, Cdocument 类主要的成员函数及功能如下:
OnNewDocument() 函数:初始化一个新的文档对象,当创建一个新文档时,系统自动调用该函数,默认重载。
OnOpenDocument() 函数:当从磁盘打开一个文件时被系统自动调用,可重载。
DeleteContents() 函数:删除文档对象的内容。当文档被关闭时系统自动调用,可重载。
Serialize() 函数:文档序列化函数,用于从一个文件中读取内容到文档对象,或者将文档对象的内容保存到文件。默认重载。
UpdateAllView() 函数:更新与文档对象关联的所有视图,该函数自动调用每个相关的视图对象的 OnUpdate() 函数实现更新操作。
SetModifiedFlag() 函数:设置或清除文档的数据是否已被修改的标志,该标志决定执行应用程序关闭操作时,是否会弹出对话框确认让用户是否需要保存文件。
IsModified() 函数:如果文档对象包含未保存数据,则返回一个非零值,否则返回一个零值。
GetTitle() 函数:返回表示文档标题的文本串,如果文档没有标题返回空串。
GetFirstViewPosition() 函数:返回一个 Cview 类型的指针,指向与当前文档对象相关的一组视图的位置。
GetNextView() 函数:返回一个 Cview 类型的指针,指向与当前文档对象相关的一组视图中的下一个视图。
GetPathName() 函数:返回与文档相关的文件的名称和路径。
Serialize() 函数:将文件中的数据装入到文档对象或将文档对象的数据保存到文件中。
(4)视图类:
视图类用于显示存储在文档类对象中的数据,并允许用户编辑这些数据。应用程序中,视图类是 CView 类的派生类, Cview 类的主要成员如下:
GetDocument() 函数:返回一个指向相关文档对象的指针,通过该指针,可以在视图类的成员函数中操作文档对象的数据,实现输出。
OnDraw() 函数:支持打印,打印预览和屏幕输出。
OnInitialUpdate() 函数:当一个视图第一次与文档对象相关联时,由系统自动调用。
OnUpdate() 函数:当文档对象的数据更新后,需要更新视图时调用。默认对整个视图进行更新,可编写代码重载该函数,仅更新部分视图。
应用程序的视图类可以直接从 Cview 类中继承,也可以从视图类的派生类中继承。主要有:
? CsrollView 类:具有滚动功能的视图类的基类。
? CformView 类:其布局在对话资源中定义的滚动视图类。
? CeditView 类:显示一个编辑控件,提供多行文本的编辑,具有文本编辑、查找、替换和滚动功能。
? CrichEditView 类:显示一个直通文本编辑控件的视图类。
? ClistView 类:显示一个列表控件的类。
? CtreeView 类:显示一个树控件的类。
? CrecordView 类:支持对话框数据交换的类。
? CctrlView 类:支持直接基于控件的视图。
(5) 文档模板类:
AppWizard 除了生成可以在工作区中展示的应用程序类,窗口框架类、文档类和视图类以外,还生成了文档模板类 CDocTemplate ,文档模板类定义了文档模板的基本功能,是抽象基类,通常不需要程序员干涉它的运行,所以在工作区中没有列出文档模板类。
? 剖析 MFC SDI 的文件结构:
根据创建项目时提供的可选项, AppWizard 所创建的文件会略有不同,标准的 AppWizard 文件包括:
? 工作区文件、项目文件:
( 1 ) .dsw 文件:由 MFC 自动生成的工作区文件,保存了当前工作区所包含的项目的信息。
( 2 ) .dsp 文件: MFC 生成的项目文件,或叫工程文件,包含当前项目的设置、项目中包含的文件等信息。
( 3 ) .clw 文件:类信息文件。
3 、应用程序源文件和头文件
根据应用程序的类型 --- 单文档、多文档或基于对话框, AppWizard 将自动创建一些应用程序源文件和头文件,这些文件分别是应用程序类、文档类、主窗口类和视图类的声明文件和实现文件。
对于单文档应用程序将生成:
? 应用程序的头文件:含有所有全局变量和用于包含其他头文件的 #i nclude 伪指令。
? 应用程序主源文件:它将创建 Cexam1_1App 类的一个对象,并重载 InitInstance() 成员函数。
? MainFrm.cpp , MainFrm.h
4 、资源文件:
资源文件包含以下各类文件:
? 一般 MFC 应用程序的默认菜单定义、加速键表和字符串表。
? 程序默认的 About 对话框和一个图标文件。
? 标准的 MFC 类的资源。
5 、预编译头文件:
StdAfx.cpp,StdAfx.h 用于建立一个预便宜的头文件 Exam1_1.PCH 和一个预定义的类型文件 StdAfx.obj 。
- MFC基本框架
- MFC基本框架
- MFC 窗口基本框架
- MFC程序的基本框架
- MFC AppWizard生成应用程序基本框架分析
- VC教程笔记1——MFC基本框架原理
- mfc 基本
- 《基于MFC的OpenGL编程》Part 0 基于MFC的OpenGL基本框架
- MFC框架
- MFC框架
- MFC框架
- MFC框架
- MFC框架
- 基本框架
- 框架学习(5 )--MFC文档视图结构的基本运转
- 基于MFC单文档SDI的OpenGL图形程序的基本框架
- OpenGL在MFC中的使用总结(一)——基本框架
- 【框架-MFC】MFC操作注册表
- Ext.Net 使用总结之查询条件中的起始日期
- jmail接收邮件
- iOS 开发者必知的 75 个工具(译文)
- S3C2440的camera接口特性及WinCE 下的驱动
- 如何做RAID5之图解
- MFC基本框架
- 联想服务客户端,100%解决您的电脑难题
- as3加密入门-1使用alchemy进行代码混淆
- 大正数减法(华为2013校园招聘上机笔试题 )
- 2013年9月22日星期日(准备工作:分离ddraw的math和interface)
- nginx 错误502 upstream sent too big header while reading response header from upstream
- ACM学习-POJ-1082-Calendar Game
- 使用VS2010 + VirtualDDK 调试驱动
- 带锁的门__简单题