"VC++文档和视图的使用与理解"
在Microsoft Visual C++(VC++)中,文档和视图是MFC(Microsoft Foundation Classes)框架的核心组成部分,用于构建用户界面。这一章节主要讨论了如何利用文档模板、文档序列化、视图以及文档视图结构来构建一个功能完备的应用程序。
7.1 文档模板
文档模板是连接应用程序的文档类、视图类和框架窗口类的关键组件。它定义了不同类型的文档可以如何在应用程序中创建、打开和保存。`CMultiDocTemplate` 是MFC提供的一种多文档模板类,用于支持多文档界面(MDI)应用程序。在`InitInstance()`函数中,通常会创建并添加`CMultiDocTemplate`的实例,例如:
```cpp
CMultiDocTemplate* pDocTemplate;
pDocTemplate = new CMultiDocTemplate(
IDR_EX_MDITYPE, // 资源ID
RUNTIME_CLASS(CEx_MDIDoc), // 文档类
RUNTIME_CLASS(CChildFrame), // MDI文档窗口类
RUNTIME_CLASS(CEx_MDIView)); // 视图类
AddDocTemplate(pDocTemplate);
```
这里的`IDR_EX_MDITYPE`是资源ID,用于关联菜单和其它资源;`CEx_MDIDoc`、`CChildFrame`和`CEx_MDIView`分别代表文档、框架窗口和视图的运行时类。
7.1.1 文档模板类
`CMultiDocTemplate` 类负责创建和管理文档对象,以及与之相关的视图和框架窗口。通过`AddDocTemplate()`方法,模板被添加到应用程序中,使得在运行时可以通过“文件”菜单的“新建”和“打开”命令创建和打开相应类型的文档。
7.1.2 文档模板字串资源
这些字符串资源定义了文档类型在应用程序中的显示方式,包括文件的默认名称、图标和在“文件”菜单中的描述。在MFC中,通常在StringTable资源中定义这些字符串,并用IDR_MAINFRAME标识。可以使用资源编辑器或应用程序向导来修改这些字符串。
7.1.3 使用多个文档类型
如果需要支持多种类型的文档,可以通过修改或添加新的`CMultiDocTemplate`实例来实现。例如,可以创建新的资源ID,为每种文档类型定义不同的字符串资源,并将对应的运行时类传递给`CMultiDocTemplate`构造函数。
7.2 文档序列化
文档序列化是将文档数据保存到磁盘并从磁盘恢复的过程。MFC通过`Serialize()`函数实现序列化,这个函数由文档类重载,负责读取和写入文件。
7.3 视图及视图类
视图是用户界面的一部分,显示和操作文档数据。视图类通常继承自`CView`,并覆盖`OnDraw()`方法来绘制文档内容,以及其他消息处理函数来响应用户的交互。
7.4 文档视图结构
文档视图结构是MFC应用程序的基础架构,包括文档类、视图类和框架窗口类。这种设计模式确保了数据(文档)与用户界面(视图)之间的分离,允许灵活的界面设计和数据管理。
文档和视图机制在MFC编程中扮演着至关重要的角色,它们提供了创建复杂用户界面的框架,使得开发者能够专注于应用程序的功能实现,而不是底层的UI细节。理解和熟练运用文档模板、序列化、视图以及文档视图结构,是开发高效、可维护的MFC应用程序的关键。