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

 

 

你可能感兴趣的:(存储)