CDocTemplate 解析

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管理

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值