当前课程知识点:VC++面向对象与可视化程序设计(下):MFC编程基础 >  第9章 单文档与多文档 >  9-2 Doc/View框架的主要成员 >  Video

返回《VC++面向对象与可视化程序设计(下):MFC编程基础》慕课在线视频课程列表

Video在线视频

Video

下一节:Video

返回《VC++面向对象与可视化程序设计(下):MFC编程基础》慕课在线视频列表

Video课程教案、知识点、字幕

文档模板框架的主要成员

Doc/View框架虽然可以调用众多不同的类

但它的核心总共就5个

它们分别是

主要是这五个

那首先我们来介绍一下CWinApp

CWinApp类代表主程序

CWinApp本身是不可见的

它负责维护进程的启动、终止、消息循环、命令行参数和资源管理等等

MFC中的主应用程序类封装用于Windows操作系统

的应用程序的初始化、运行和终止

基于框架生成的应用程序必须有

而且仅有一个是从CWinApp派生的类的对象

那也就是说在创建窗口之前要先构造这个对象

CWinApp类常用的方法主要有这些

那么有几个我想大家应该比较熟悉了

比如说LoadCursor 载入光标资源

LoadIcon 载入图标资源

是将一个文档模板加到应用程序的可用文档模板列表中

再比如说SelectPrinter

是选择先前由用户在打印对话框中指定的打印机

这些的话 是它常用的方法

大家可以通过msdn这个网站上看到

它更多的更详细的内容

那么CWinApp常用的初始化函数有这一些

比如说SetRegistryKey

那么使应用程序的设置保存在注册表中

而不是.INT这个文件中

那么这是设置对话框和消息框缺省背景函数

再比如说EnableShellOpen

这是允许用户通过Windows的文件管理器打开数据文件

比如说RegisterShellFileTypes

这是在Windows的文件管理器中注册所有的应用程序的文档类型

那么这是一些常用的初始化函数

常用的命令操作函数比如说OnFileNew

这个大家应该很熟悉

它实现的是ID_FILE_NEW命令

实际上就是文件菜单项下面的新建菜单项

它是文件菜单下的打开文件操作命令

它实现的是ID_FILE_OPEN的命令

OnHelp处理应用程序内的F1帮助命令

再比如说OnContextHelp这是处理应用程序内的SHIFT+F1的命令

下面我们介绍CDocument类

常用的方法有这一些

GetTitle这是获得文档的标题

那么既然能get就可以set

那么这可以是SetTitle

设置文档标题

再比如说GetPathName跟SetPathName

这是获取或者设置文档数据文件的路径的字符串

再比如说AddView

这是对与文档相关联的视图列表添加到指定的视图

Remove就是Add的逆操作 移走

那么这就是从文档视图列表中删除视图

UpdateAllViews这是通知所有视图

文档已被修改 应该重新绘制

DisconnectViews这是使文档与视图相分离

GetFile是获得指向CFile类型的指针

这是CDocument的一般方法

这些方法用的会比较多

它还有一些虚拟方法

比如说OnNewDocument OnOpenDocument

这些比如说是用来“建立”、“打开”、“保存”和“关闭”文档的

比如说这个CanCloseFrame

这是确定观察文档的框架窗口是否被允许关闭

实际上这是一个判断

这是在未撤销文档对象时删除文档数据

ReleaseFile这是释放文件以允许其他应用程序使用

SaveModified这是查询文档的修改状态并存储修改的文档

那么这个IsModified 这是一个判断

确定文档从它最后一次存储后是否被修改过

那么在文档修改过程中

我们通常要设置它一个标志

所以这里有一个函数叫做SetModifiedFlag

这是设置文档从它最后一次存储后是否被修订过的

这么一个标志是布尔值

所以它的值就是True/False

然后这个GetFirstViewPosition

这是获得视图列表头的位置

GetNextView获取视图列表的下一个视图

那么这些CDocument类的虚拟的方法是经常用到的

那么最常用到的是什么呢?

是SetModifiedFlag()和UpdateAllViews()

文档内容被修改后

一般要调用SetModifiedFlag()来设置一个标志

然后调用UpdateAllViews()刷新所有的和文档关联的视图

那实际上这个函数调用各个视图类的OnUpdate()函数

这样做可以保证各个视图之间的同步

那用户可以通过GetFirstView()和GetNextView()

得到和文件相关联的视图的指针

通常代码是这么写的

GetFirstViewPosition()函数它返回了一个位置的值pos

pos的数据类型是POSITION的数据类型

那么如果这个POSITION不是空

我们就可以获得后续的视图指针

那如果是空的话

那就根本没有获得表头位置

就根本无法谈起继续下面视图的操作

那CDocument类在现在流行的这个MVC

就是Model View Control

设计模式中相当于其中的Model

表示抽象数据类型

文档最主要的操作功能有

打开保存文档

维护文档相关的视图列表

维护文档修改的标志

通过电子邮件发送文档等等

那用户修改文档数据的时候

调用SetModifiedFlag方法来标志数据是否被改过了

当程序关闭该文档关联的最后一个视图的时候

文档会自动提示你保存修改

那从CDocument类派生新的文档类的一般过程是这样的

为每一个文档类型从CDocument类派生一个相应的文档类

然后为文档类添加成员变量

这些变量主要用来保存文档的数据

并使其他的对象

比如说视图对象

可以访问这些成员变量

从而实现文档和视图的相互搭配使用

最后重载,重载用Serialize成员函数

实现文档数据的串行化

那无论是保存文档或是打开文档

应用程序都是通过调用文档类的

Serialize串行化成员函数来完成操作的

因此在大多数的情况下

我们都需要重载Serialize成员函数

这个成员函数带有一个CArchive类型的参数

这是一个与所打开的文件相关联的对象

一般情况下

我们说总是使用CArchive对象来保存和打开文档

那我们谈到CArchive对象

它提供了一个类型安全缓冲机制

用于将可序列化或者说可串行化对象

写入CFile对象

或从中读取可串行化的对象

通常CFile对象表示磁盘文件

但是它也可以是表示剪贴板的内存文件

我们刚才谈到的串行化

在有的书里面写的是序列化

在框架创建CArchive对象时

已根据用户选择的是“保存”或者“另存为”

还是“打开”来设置了CArchive对象的类型

我们可以使用CArchive类的成员函数IsStoring

来检索当前CArchive类对象的类型

从而得知用户所期望的操作是保存还是读取

执行不同的操作

好!我们下面介绍CView类 就是视图类

它也是从CWnd下面派生的

那么大家看这个层次构架就知道

视图类具有CWnd的所有功能

比如说创建、移动、显示和隐藏窗口等等

CView类可以接受任何Windows的消息

而CDocument类则不行

CView类提供了文档类所需要的最基本的功能实现

那么CView这个类主要的虚拟方法有这一些

第一个是IsSelected

确定文档是否被选中

OnScroll 当用户滚动时CView的响应

那比如说OnScroll可以水平滚动垂直滚动

那用户响应这滚动的时候

当用户操作这滚动的时候

CView要对用户这个滚动操作进行响应

在类第一次构造后由MFC调用

OnDraw这个函数在前面上一讲的例子里面已经出现过

它是由MFC调用发出文档到设备描述表

关于设备描述表的概念大家可以再复习一下我们前面讲的

Windows编程里面的一些基本内容

OnUpdate是由MFC调用对文档的修改进行响应

OnPrepareDC是在调用OnDraw前允许修改设备描述表

由MFC调用

CView类中最常用的是OnDraw函数

这个函数在屏幕发生变化或因为焦点的变化

需要重新绘制时调用

如果没有这个函数

就不可能在程序的切换后保证屏幕的正确显示

OnDraw只要是需要重绘的时候都会调用

无论是往屏幕画还是往打印机打

WM_PAINT这个消息呢

只是负责往屏幕上画图

不负责往打印机上输出

所以这是OnDraw函数跟WM_PAINT消息的区别

所以要注意尽量不要在OnDraw之外的函数调用绘图方法

那些方法不会在视图需要重新绘制的时候被自动调用

如果要想在数据更新的时候强制视图更新

可调用Invalidate方法和UpdateWindow方法来实现

CView类有一些子类

比如说CEditView这是简单的文本编辑器

比如说记事本文件

CListView的话呢是基于列表的视图

类似文件夹的浏览

CTreeView基于树状控件的视图

它类似文件浏览左侧的树状结构

CRichEditView支持多种字体、OLE和RTF格式的高级编辑器

CScrollView是支持滚动条的视图

CFormView是窗体视图

支持它在上面使用对话框控件

CRecordView是连接到ODBC数据库的视图

那么关于连接到ODBC数据库

我们在数据库那一讲里面会给大家做详细的介绍

还有CDaoRecordView是连接到DAO数据库的视图

好!下面我们介绍CDocTemplate类

这是文档模板类

在应用程序中有着非常重要的作用

它将原本独立的文档、视图和框架窗口对象联系在一起

文档模板类通常负责具体的关联文档、视图和框架的创建

大家可以看一下文档模板类它的层次结构

文档视图结构中

将文档、视图和框架关联起来的对象是CDocTemplate类

对于单文档程序是由CSingleDocTemplate类来完成

而对于多文档程序则是由CMultiDocTemplate类完成

这两个类都是CDocTemplate类的子类

CDocTemplate这个类的一般方法和虚拟方法主要有这些

比如说GetDocString是获得与文档相关的字符串

这个LoadTemplate是加载指定的模板

AddDocument是给文档模板添加指定的模板

那么add跟remove是成对出现的

RemoveDocument是从文档模板列表中删除文档

再比如说GetFirstDocPosition是获得与文档模板相关的第一个文档的位置

GetNextDoc是获得文档及下一个文档

CreateNewDocument是建立文档

CreateNewFrame是建立包含文档和视图的框架窗口

OpenDocumentFile是打开由路径名指定的文档

CloseAllDocument是关闭所有文档

SetDefaultTitle这是显示文档窗口的标题栏中默认的标题

SaveAllModified是查询文档模板的修改状态

并存储与之关联的所有文档

我们再介绍CFrameWnd类

CFrameWnd类在文档视图结构中也是起着举足轻重的作用

CFrameWnd类往往用于创建应用程序的主窗口

因为它能很好地支持系统菜单和控制条

为此定义了大量的成员函数和变量

在编写文档视图结构的应用程序时

CFrameWnd作为主窗口管理视图和文档对象

视图对象和控制条都成为CFrameWnd的子窗口

它们分享客户区

其位置被CFrameWnd有效的排列

所以我们说CFrameWnd直接支持单文档

而对于多文档

使用其派生的CMDIFrameWndEx或者CMDIChildWndEx这些类

那为了管理控制条和视图

CFrameWnd为几个窗口消息建立了消息映射

专门进行处理

比如说OnInitMenuPopup

那么这是处理WM_INITMENUPOPUP消息的

设置弹出菜单的各个项目的启用和禁止状态

OnEnterIdle是处理WM_ENTERIDLE消息的

设置状态条的空闲时提示消息

OnMenuSelect是处理WM_MENUSELECT消息的

当某菜单项被选择时更新状态条的显示

OnToolTipText是处理TTN_NEEDTEXT通知消息

显示工具条的工具提示

这是更新状态条的键盘状态指示器的信息

这是更新控制条的启用禁止状态

如工具条的按钮

OnSize这是WM_SIZE的窗口消息

调用RecalcLayout排列客户区空间及视图

然后OnHScroll和OnVScroll

就是滚动条消息了 水平垂直滚动条

OnClose就是关闭消息了

存储并关闭文档

VC++面向对象与可视化程序设计(下):MFC编程基础课程列表:

第0章 课前讨论

-讨论实录

--0-0

第6章 MFC基础知识

-6-1 MFC概述

--6-1 MFC基础知识

-6-2 C++的基本知识

--6-2-1 类

--6-2-2 对象

--6-2-3 类的方法

--6-2-4 内联函数

--6-2-5 构造函数和析构函数

--6-2-6 重载

--6-2-7 友元函数

--6-2-8 友元类

--6-2-9 指针

--6-2-10 类的继承

--6-2-11 多态性和虚拟函数

-6-3 MFC类的组织结构及主要的类的简介

--6-3-1 MFC类的组织结构

--6-3-2 根类

--6-3-3 应用程序结构类

--6-3-4 可视对象类

--6-3-5 通用类

--6-3-6 OLE类

--6-3-7 ODBC数据库

-6-4 MFC中全局函数和全局变量

--6-4 MFC中全局函数和全局变量

第7章 Windows标准控件在可视化编程中的应用

-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章 在MFC中创建应用程序的资源

-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章 单文档与多文档

-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章 多媒体应用程序的设计

-10-1 利用音频函数实现多媒体程序设计

--10-1-1

--10-1-2

--10-1-3

--10-1-4

-10-2 利用Windows Media Player控件实现多媒体程序设计

--10-2

-课堂示例源代码

--html

第11章

-例11-1

--例1

-例11-2

--例11-2

-例11-3

--例11-3

-例11-4

--例11-4

-11-1 ODBC介绍与引用

--11-1

-课堂示例源代码

--html

第三次作业及答题链接

-第三次作业及答题链接

Video笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。