当前课程知识点:VC++面向对象与可视化程序设计(下):MFC编程基础 > 第9章 单文档与多文档 > 9-1 概述 > 9-1
返回《VC++面向对象与可视化程序设计(下):MFC编程基础》慕课在线视频课程列表
返回《VC++面向对象与可视化程序设计(下):MFC编程基础》慕课在线视频列表
大家好!今天我们开始第九章的内容
我们主要介绍单文档与多文档
那实际上我们在第八章的时候
已经接触了单文档
在当时我们只是讲了一些单文档的简单的应用作为入门
而这一章主要是要介绍文档视图的结构及其工作机制
在了解了文档视图的结构和工作机制的基础上
我们再通过案例进一步介绍单文档及多文档的操作
首先我们来了解一些基本的概念
单文档界面与多文档界面
Visual C++的MFC库 它支持三种不同的应用程序
这个大家比较熟悉
因为在创建工程文件的时候有单文档界面 多文档界面
以及基于对话框的应用程序
三个选项供大家选择
那我们进入MFC的学习
刚开始阶段我们主要介绍基于对话框的应用程序
尤其是在介绍基于对话框的应用程序的过程中
我们介绍了一系列的控件的使用
那么上一讲我们介绍了简单的单文档应用程序
单文档就是SDI Single Document Interface
多文档界面叫MDI
MDI的应用程序每次可以读写多个文件或者文档
它可同时对多个文件进行操作
因此它也可以有多个窗口
我们在使用应用程序向导创建SDI和MDI界面的应用程序的过程
应该说几乎完全一样
它的主要差别在于
在创建SDI界面的应用程序的时候
它并不生成CChildFrame这个类
CMainFrame类的基类是CFrameWndEx类
在创建MDI界面的应用程序时
就有CChildFrame类生成
CMainFrame类的基类是CMDIFrameWndEx
那我们谈到视图
上一讲我们知道我们的操作主要是在视图文件里进行
视图是文档的不同表现形式
比如说一个html语言的文件
在浏览器里面和记事本里面打开的表现形式是不同的
但它们操作的是同一个文件
这也就是说一个文档对应着两个视图
由于每一个文档可以有多个视图
但每个视图只能对应于一个确定的文档
因此多文档程序需要解决的问题
仅仅是多个文档的数据管理方法的问题
对多文档程序
最初的文档模板它只支持主窗口
但每次打开一个新文档时都调用CDocument
这个类的方法或者说函数
建立一个由CMDIChildWnd派生的新的MDI的子窗口
这些窗口中保存着各种已打开的文档
这些所有的细节都由MFC库处理
那我们介绍一下文档视图的结构
在文档视图结构中
对数据进行管理和维护
数据保存在文档类的成员变量中
然后文档类通过串行化的过程将数据保存到
磁盘文件或者数据库中
文档类还可处理来自菜单、工具栏按钮
和加速键的WM_COMMAND消息
那除了WM_COMMAND消息之外
文档不能处理其他的Windows消息
由此我们可以看出
命令消息可以被多种对象处理
这些对象除了窗口和视图外
还可以是文档、文档模板或者应用程序本身
这一点与Windows消息和控件通知消息不同
因为Windows消息和控件通知消息
就只能被窗口和视图处理
视图它是在文档和应用程序之间起中介作用
它可以接收用户的输入
并接受用户的修改
通过调用文档和视图的接口
将修改的信息反馈给文档类
实际的数据更新仍然由文档来完成
视图可以直接或间接地访问文档类中的成员变量
它从文档类中 而不是从存储介质中
将文档中的数据取出来
然后在屏幕上显示文档的数据
那文档视图结构的工作机制又是怎样的呢
视图通过GetDocument成员函数
获得指向相关联的文档对象的指针
然后通过这个指针调用文档类的成员函数
来从文档中读取数据
视图把数据显示于计算机的屏幕上
然后用户通过与视图的交互来查看数据
并对数据进行修改
视图通过相关联的文档类的成员函数
将经过修改的数据传递给文档对象
文档对象获得修改过的数据之后
对其进行必要的修改
最后保存到磁盘文件中
这就是文档视图结构的工作机制
那下面给大家介绍一下单文档程序中
文档、视图对象的创建过程
单文档程序中框架窗口、文档和视图的创建
是在应用程序对象的InitInstance()成员函数中
通过文档模板类完成的
InitInstance()这个函数是在.cpp的文件中
首先我们先定义一个CSingleDocTemplate
就是单文档模板类的一个对象
然后通过new指针创建pDocTemplate这个指针
这个CSingleDocTemplate它有四个参数
第一个参数就是主窗口框架的ID
第二个参数CMyDoc是应用程序中的文档类
第三个参数是CMainFrame是应用程序中的框架窗口
第四个参数是CMyView是应用程序中的视图类
那么这样得到了pDocTemplate之后
通过AddDocTemplate来加载文档模板类对象
到文档模板列表之中
-讨论实录
--0-0
-6-1 MFC概述
-6-2 C++的基本知识
--6-2-1 类
--6-2-2 对象
--6-2-6 重载
--6-2-9 指针
-6-3 MFC类的组织结构及主要的类的简介
--6-3-2 根类
-6-4 MFC中全局函数和全局变量
-7-1 概述
--7-1-1
--7-1-2
-7-2 按钮控件及其应用
--128B12447816EEF99C33DC5901307461
-7-3 按钮控件及其应用
--7-3
-7-4 静态控件
--7-4
-7-5 列表框控件
--7-5-1
--7-5-2
-7-6 编辑框控件
--7-6
-7-7 组合框控件
--7-7
-7-8 对话框通用控件
--7-8-1
--7-8-2
-讲义源代码
--html
-8-1&2 资源的应用以及菜单资源的使用
--8-1-1
--8-1-2
-8-3 快捷菜单的创建及其应用
--8-3
-8-4 加速键资源的创建及其使用
--8-4
-8-5 工具条资源的创建及其使用
--8-5
-8-6 字符串资源的使用
--8-6
-8-7 位图资源的创建及其使用
--8-7
-课堂示例源代码
--html
-第一次作业内容及要求
--html
--第一次作业及答题链接--作业
-9-1 概述
--9-1
-9-2 Doc/View框架的主要成员
--Video
-9-3 文档操作中的一些重要概念
--Video
-9-4 SDI编程实例
--Video
-9-5 MDI编程实例
--9-5-1
--9-5-2
-课堂示例源代码
--html
-第二次作业内容及要求
--html
--第二次作业及答题链接--作业
-10-1 利用音频函数实现多媒体程序设计
--10-1-1
--10-1-2
--10-1-3
--10-1-4
-10-2 利用Windows Media Player控件实现多媒体程序设计
--10-2
-课堂示例源代码
--html
-例11-1
--例1
-例11-2
--例11-2
-例11-3
--例11-3
-例11-4
--例11-4
-11-1 ODBC介绍与引用
--11-1
-课堂示例源代码
--html
-第三次作业及答题链接