CDocTemplate 解析

MFC多文档应用程序同时显示两个视图 MFC多文档应用程序同时显示两个视图,通过创建多个CMultiDocTemplate* 进行实现 立即下载

1.  CDocTemplate是一个抽象基类,一般使用CMultiDocTemplate和CSingleDocTemplate,CDocTemplate管理CDocument,CView,CFrameWnd3个类。

 

其中

CDocument     负责存储数据

CView             负责描述CDocument中的数据  一个CDocument可以对应多个View

CFrameWnd    程序主窗口

 

CDocument  中有一个CPtrList 指向对应的多个View 是一个链表

                    还有一个CDocTemplate的指针 回指向CDocTempalte

CView           中有一个CDocumet指针,用来获取数据

CFrameWnd  中有一个CView* m_pActiveView的指针 指向active的view

 

2. 每当用户打开或者新建一个文件,就会创建CDocument CView CFrameWnd各一份(一般是派生类),被CMultiDocTemplate或者CSingleDocTemplate管理

 

3. 过程

每个CDocTemplate中有3个指针

 

CRuntimeClass* m_pDocClass;

CRuntimeClass* m_pFrameClass;

CRuntimeClass* m_pViewClass;

 

这3个指针用来指向CDocument,CView,CFrameWnd的static CRuntimeClass对象,所以用这3个指针可以调用CreateObject来实现对这3个类对象的创建

 

当用户新建或者打开一个文件时

1. CWinApp::OnFileNew() 或者CWinApp::OnFileOpen()被调用

2. 进入CMultiDocTemplate::OpenDocumentFile()或者CMultiDocTemplate::NewDocumentFile()

3. 在2的函数中

   1)调用CDocTemplage::CreateNewDocument()  里面调用 m_pDocClass->CreateObject();

   2)调用CDocTemplage::CreateNewFrame()  里面调用m_pFrameClass->CreateObject();

4. 在3 2)中

    调用frame->LoadFrame() 在这里函数里面调用CFrameWnd::CreatView() 里面m_pViewClass->CreateObject()

 

 

这样每次打开新建文件 就通过CDocTemplate创建了3个对象并被CDocTemplate管理

 

 

CDocTemplate 转自:http://blog.sina.com.cn/s/blog_44864f010100b8od.html Document 是资料存储的地方。 CView View 负责描述(呈现)Document 中的资料。 Document Frame(View Frame)为了对不同的窗口有不同的Frame。 CDocTemplate 管理CDocument / CView / CFr 阅读详情

相关推荐

CMultiDocTemplate 浅谈(转)

MFC之所以能成为application framework,很大的原因就在于其Document/View结构对于快速开发的支持。Document/View很好地划分了程序代码的前台后台,让程序员可以专心于设计数据结构和UI。 Document即为“资料”,按我理解就是饭店的厨师;而View就是饭店的服务员。View负责点菜和上菜(对用户请求做出直接响应),而Document负责烹饪,即处理用户

looklzg1105的专栏 4583

从新手小白入门MFC框架视频精讲

微软基础类库(英语:Microsoft Foundation Classes,简称MFC)是微软公司提供的一个类库(class libraries),以C++类的形式封装了Windows API,并且包含一个应用程序框架,以减少应用程序开发人员的工作量。其中包含大量Windows句柄封装类和很多Windows的内建控件和组件的封装类!

IDR_MAINFRAME字符串资源中各子串的含义[转]

IDR_MAINFRAME字符串资源中包含7个子串,分别以\n结束,即如下格式:<windowTitle>\n<docName>\n<fileNewName>\n<filterName>\n<filterExt>\n<regFileTypeId>\n<regFileTypeName>\n(1)CDocTemplat...

weixin_30767835的博客 266

CDocument, CView, CFrameWnd, CWinApp, CDocTemplate 这五个框架类在MFC文档/视图结构程序中的角色

说明CDocument, CView, CFrameWnd, CWinApp, CDocTemplate 这五个框架类在MFC文档/视图结构程序中各自扮演   1 CWinApp拥有一个对象指针:CDocManager* m_pDocManager 2 CDocManager拥有一个指针链表CPtrList m_templateList,用来维护一系列的Docment Template...

u013228754的博客 1164

IDR_MAINFRAME字符串资源含义

当我们在MFC单文档工程创建完成后,我们可以在其资源视图的MENU和String Table文件夹下都发现有IDR_MAINFRAME的ID号,说明一个资源ID可以标识多种资源;目前可以代表的资源有字符串资源、菜单资源;这里主要说明下IDR_MAINFRAME中各个子串的含义; 我们创建...

weixin_30527323的博客 120

CWinApp类CMultiDocTemplate类CDocument类CView类的关系

转载请说明转自: 1.CWinApp类 它包含并管理着应用程序的文档/视窗的所有信息。它有一个成员变量CDocManager*m_pDocManager,此变量是文档/视窗的管理器;m_templateList是CDocManager里的一个列表,此列表里保存了所有文档模板的指针,当用户调用CWinApp::AddDocTemplate(pDocTemp...

dgh18494的博客 331

对CDocManager的认识

首先有个不明白的地方,我的书上说CDocManager类是不公开的,可是我还是找到了他的类定义和实现,真搞不懂她这个不公开是什么意思???   CDocManager的定义如下:  class CDocManager : public CObject  {  DECLARE_DYNAMIC(CDocManager)  public:  // Constructor  CDocManager(); 

数据牛仔的专栏 2539

MFC类说明

①CObject类:CObject是MFC的根类,绝大多数MFC类是其派生的,CObject 实现了一些重要的特性,包括动态类信息、动态创建、对象序列化、对程序调试的支持,等等。CObject定义了一个CRuntimeClass类型的静态成员变量:CRuntimeClass classCObject,还定义了几组函数:构造函数析构函数类,诊断函数,与运行时类信息相关的函数,与串行化相关的函数。其中...

mxdxm8899的专栏 187

当打开一个文档时,MFC如何选择所使用的文档模板对象?

当把一个 文档名 作为 变量 来调用CWinApp::OpenDocumentFile()时,MFC是 如何选择 用来 打开一个给定文档的 文档模板对象的呢?       如果跟踪CWinApp::OpenDocumentFile()函数的整个调用过程,会发现该函数只是通过存储在 应用程序对象 中的m_pDocManager指针简单的调用CDocManager::OpenDocumentFi

jiangdf的专栏 2672

深入浅出MFC文档/视图架构之文档模板

文档模板管理者类CDocManager  在"文档/视图"架构的MFC程序中,提供了文档模板管理者类CDocManager,由它管理应用程序所包含的文档模板。我们先看看这个类的声明: class CPtrList : public CObject{ DECLARE_DYNAMIC(CPtrList) protected:  struct CNode  {   C

berniebd的专栏 2138

2.4--当打开一个文档时,MFC如何选择所使用的文档模板对象?

      当把一个 文档名 作为 变量 来调用CWinApp::OpenDocumentFile()时,MFC是 如何选择 用来 打开一个给定文档的 文档模板对象的呢?      如果跟踪CWinApp::OpenDocumentFile()函数的整个调用过程,会发现该函数只是通过存储在 应用程序对象 中的m_pDocManager指针简单的调用CDocManager::OpenDocume

1451

MFC文档视图结构程序结构总揽

http://jingyan.baidu.com/article/8ebacdf0fe0a7a49f65cd519.html MFC文档视图结构程序结构总揽   当我们使用MFC AppWizard生成一个MFC程序,选用所有默认的设置(当然也是Multiple Documents,本文讨论主要基于Multiple Documents,对于Single Document情况仅以简单表述提及

mituan1234567的专栏 580

技术演进中的开发沉思-34 MFC系列:Document-View 架构

MFC的Document-View架构是一种职责分离的设计模式,将数据管理(Document)与界面展示(View)解耦。Document负责维护数据完整性,View专注于呈现和交互,CDocTemplate协调二者关系。以Scribble绘图程序为例,Document存储线条数据,View负责绘制,Serialize机制实现数据持久化。该架构通过宏机制实现动态创建和序列化功能,体现了模块化设计思想。虽然技术已过时,但其分离关注点的思想仍具参考价值,是早期设计模式的典范。

你的天空阅读专栏 984

CDocument

CDocument类为用户定义的文档类提供了基本的函数功能。文档类表示了通常用于File Open命令打开和使用File Save命令保存的数据。   CDocument支持标准操作,如创建、装载、保存等。框架用CDocument定义的界面来操作文档。   应用可支持多种文档,例如文本文档和工作表。每种类型都有一个相关的文档模板。文档模板指定该类文档所使用的资源(如菜单、图标和

远有青山 4162

关于CDocManager类

msdn中居然找不到CDocManager类的说明,网上找到这篇文档,有待分析。首先有个不明白的地方,我的书上说CDocManager类是不公开的,可是我还是找到了他的类定义和实现,真搞不懂她这个不公开是什么意思???        CDocManager的定义如下:class CDocManager : public CObject{ DECLARE_DYNAMIC(CDocManage

孟源的专栏 3090
上一篇: MFC 解密(5)消息机制
下一篇: 二叉排序树的创建,插入,遍历
rommi
博客等级 码龄21年 44粉丝 137原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值