当前位置: 首页 > article >正文

MFC 文档模板 每个文档模板需要实例化吧

  1. 文档模板的实例化
    • 在MFC(Microsoft Foundation Classes)应用程序中,文档模板通常是需要实例化的。文档模板类(CDocTemplate)主要有两种派生类用于不同的文档 - 视图架构场景:CSingleDocTemplate(单文档模板)和CMultiDocTemplate(多文档模板)。
    • 当应用程序启动或者在需要处理特定类型文档的时候,这些文档模板会被实例化。例如,在应用程序的InitInstance函数(这是CWinApp类或者其派生类中的一个关键函数,用于初始化应用程序实例)中,通常会看到文档模板的实例化代码。对于单文档应用程序,可能会有如下代码:
CSingleDocTemplate* pDocTemplate;
pDocTemplate = new CSingleDocTemplate(
    IDR_MAINFRAME,
    RUNTIME_CLASS(CMyDocument),
    RUNTIME_CLASS(CMainFrame),
    RUNTIME_CLASS(CMyView));
AddDocTemplate(pDocTemplate);
  • 对于多文档应用程序,会使用CMultiDocTemplate进行类似的实例化操作。这里的IDR_MAINFRAME是资源ID,用于标识与文档相关的资源(如菜单、图标等),RUNTIME_CLASS宏用于获取类的运行时信息,在这个例子中,它指定了文档类(CMyDocument)、框架窗口类(CMainFrame)和视图类(CMyView),这样文档模板就知道了如何创建和关联这些对象来处理特定类型的文档。
  1. 实例化的作用和意义
    • 实例化文档模板的主要作用是建立起文档、视图和框架窗口之间的联系,并且为处理特定类型的文档做好准备。一旦文档模板被实例化并添加到应用程序(通过AddDocTemplate函数),当用户打开一个新文档或者应用程序需要创建特定类型的文档时,就可以根据这个文档模板来生成相应的文档、视图和框架窗口组合。
    • 例如,在单文档应用程序中,当用户启动应用程序时,基于实例化的单文档模板,系统会创建一个文档对象、一个框架窗口对象和一个视图对象,并且将它们关联起来,使得用户可以通过视图来操作文档内容,而框架窗口为视图提供了容器和一些基本的窗口功能(如标题栏、菜单等)。在多文档应用程序中,文档模板的实例化同样为创建和管理多个文档及其对应的视图和框架窗口提供了基础,使得用户可以同时打开和处理多个同类型的文档。

RUNTIME_CLASS什么意思

  1. RUNTIME_CLASS宏的基本含义

    • 在MFC(Microsoft Foundation Classes)中,RUNTIME_CLASS是一个宏。它用于获取一个类的运行时信息,这个信息主要与C++ 的运行时类型识别(Runtime Type Identification,RTTI)机制相关。具体来说,它返回一个指向CRuntimeClass结构的指针,CRuntimeClass结构包含了类的名称、类的大小、类的基类等信息,这些信息对于在运行时动态地创建对象、确定对象的类型等操作非常重要。
  2. 在文档模板实例化中的应用

    • 当在实例化文档模板(如CSingleDocTemplateCMultiDocTemplate)时使用RUNTIME_CLASS宏,是为了告诉文档模板相关类的运行时信息。以CSingleDocTemplate的实例化代码为例:
CSingleDocTemplate* pDocTemplate;
pDocTemplate = new CSingleDocTemplate(
    IDR_MAINFRAME,
    RUNTIME_CLASS(CMyDocument),
    RUNTIME_CLASS(CMainFrame),
    RUNTIME_CLASS(CMyView));
  • 这里的RUNTIME_CLASS(CMyDocument)RUNTIME_CLASS(CMainFrame)RUNTIME_CLASS(CMyView)分别提供了文档类(CMyDocument)、框架窗口类(CMainFrame)和视图类(CMyView)的运行时信息。文档模板(CSingleDocTemplate)会利用这些信息在需要的时候(比如用户打开一个新文档)动态地创建这些类的对象,并且正确地建立它们之间的关联。例如,它知道通过RUNTIME_CLASS(CMyDocument)所指向的运行时信息来创建一个文档对象,并且将这个文档对象与通过RUNTIME_CLASS(CMyView)创建的视图对象以及RUNTIME_CLASS(CMainFrame)创建的框架窗口对象相连接,从而实现文档 - 视图 - 框架窗口的组合,用于处理特定类型的文档。
  1. 与运行时类型识别的联系
    • 通过RUNTIME_CLASS宏获取的运行时信息,可以在程序运行过程中进行类型检查和类型转换等操作。例如,可以使用IsKindOf函数(它是CRuntimeClass结构相关的一个函数)来检查一个对象是否是某个特定类或者其派生类的类型。假设pObject是一个指向某个对象的指针,通过以下代码可以检查它是否是CMyDocument类或者其派生类的类型:
if (pObject->IsKindOf(RUNTIME_CLASS(CMyDocument)))
{
    // 执行相关操作,如果对象是CMyDocument类或者其派生类
}
  • 这种运行时类型识别的功能在MFC应用程序中非常有用,比如在消息处理、对象持久化(将对象保存到文件或者从文件恢复)等场景中,能够根据对象的类型来采取正确的操作。

http://www.kler.cn/a/445497.html

相关文章:

  • redis数据类型:list
  • Dhatim FastExcel 读写 Excel 文件
  • 【Axure高保真原型】伸缩表单
  • EasyGBS国标GB28181平台P2P远程访问故障排查指南:客户端角度的排查思路
  • Android 折叠屏问题解决 - 展开或收起页面重建
  • 青少年编程与数学 02-004 Go语言Web编程 10课题、中间件
  • Note20241220_一种组态王Modbus模拟通讯仿真实现方案
  • 《探秘 QT 5.14.1 类库的奇妙世界》
  • html 中 表格和表单的关系与区别
  • 连通“数据”,让制造变“聪明”
  • Leetcode经典题15-- 找出字符串中第一个匹配项的下标(KMP)
  • JS CSS HTML 的代码如何快速封装
  • 使用 Lambda 创建 Authorizer 对 API Gateway 访问进行鉴权
  • Mybatis分页插件的使用问题记录
  • 后摩尔定律时代,什么将推动计算机性能优化的发展?
  • Halcon 机器视觉案例 之 药剂液面高度测量
  • flutter 快速实现侧边栏
  • 软件架构设计方法之The Clean Architecture 整洁架构
  • android opencv导入进行编译
  • 使LED每秒闪烁一次
  • 海外招聘丨埃因霍温科技大学—安全人工智能自动机器学习博士后
  • 系统设计:微服务架构的可扩展性系统 详解
  • 【mysql】1205 -Lock wait timeout exceeded; try restarting transaction
  • Hive其三,数据库操作,小技巧设置,加载数据等操作
  • 白嫖内网穿透之神卓互联Linux安装教程(树莓派)
  • 第一次面试到第一份offer的经历分享