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