MFC 多文档源码分析1
添加模板
在复写的CWinApp::InitInstance()函数中添加下面代码
CMultiDocTemplate* pDocTemplate;
pDocTemplate = new CMultiDocTemplate(IDR_SMARTTTYPE,RUNTIME_CLASS(CCosiWorksDoc),RUNTIME_CLASS(CChildFrame), // custom MDI child frameRUNTIME_CLASS(CCosiWorksView));
AddDocTemplate(pDocTemplate);
new一个CMultiDocTemplate,并用doc,frame,view的CRuntimeClass类初始化CMultiDocTemplate
然后调用AddDocTemplate,往CWinApp的成员m_pDocManager变量,文档管理器中添加模板
void CWinApp::AddDocTemplate(CDocTemplate* pTemplate)
{if (m_pDocManager == NULL)m_pDocManager = new CDocManager;m_pDocManager->AddDocTemplate(pTemplate);
}
打开文档
CDocument* CWinApp::OpenDocumentFile(LPCTSTR lpszFileName)
{ENSURE_VALID(m_pDocManager);return m_pDocManager->OpenDocumentFile(lpszFileName);
}CDocument* CDocManager::OpenDocumentFile(LPCTSTR lpszFileName)
{POSITION pos = m_templateList.GetHeadPosition();CDocTemplate* pBestTemplate = NULL;while (pos != NULL){CDocTemplate* pTemplate = (CDocTemplate*)m_templateList.GetNext(pos);CDocTemplate::Confidence match;match = pTemplate->MatchDocType(szPath, pOpenDocument);if (match > bestMatch){bestMatch = match;pBestTemplate = pTemplate;}if (match == CDocTemplate::yesAlreadyOpen)break; // stop here}return pBestTemplate->OpenDocumentFile(szPath);}CDocument* CMultiDocTemplate::OpenDocumentFile(LPCTSTR lpszPathName,BOOL bMakeVisible)
{CDocument* pDocument = CreateNewDocument();
}CDocument* CDocTemplate::CreateNewDocument()
{CDocument* pDocument = (CDocument*)m_pDocClass->CreateObject();return pDocument;
}void CMultiDocTemplate::AddDocument(CDocument* pDoc)
{ASSERT_VALID(pDoc);CDocTemplate::AddDocument(pDoc);ASSERT(m_docList.Find(pDoc, NULL) == NULL); // must not be in listm_docList.AddTail(pDoc);
}CDocument* CMultiDocTemplate::OpenDocumentFile(LPCTSTR lpszPathName,BOOL bMakeVisible)
{CDocument* pDocument = CreateNewDocument();CFrameWnd* pFrame = CreateNewFrame(pDocument, NULL);
}CFrameWnd* CDocTemplate::CreateNewFrame(CDocument* pDoc, CFrameWnd* pOther)
{CFrameWnd* pFrame = (CFrameWnd*)m_pFrameClass->CreateObject();
}CDocument* CMultiDocTemplate::OpenDocumentFile(LPCTSTR lpszPathName,BOOL bMakeVisible)
{CDocument* pDocument = CreateNewDocument();CFrameWnd* pFrame = CreateNewFrame(pDocument, NULL);pDocument->OnOpenDocument(lpszPathName);
}
到这里调用到了CMultiDocTemplate中实际的文档里,就是RUNTIME_CLASS(CCosiWorksDoc)
MFC 多文档源码分析1相关推荐
- java计算机毕业设计高铁在线购票系统MyBatis+系统+LW文档+源码+调试部署
java计算机毕业设计高铁在线购票系统MyBatis+系统+LW文档+源码+调试部署 java计算机毕业设计高铁在线购票系统MyBatis+系统+LW文档+源码+调试部署 本源码技术栈: 项目架构:B ...
- java计算机毕业设计工作流流程编辑OA系统MyBatis+系统+LW文档+源码+调试部署
java计算机毕业设计工作流流程编辑OA系统MyBatis+系统+LW文档+源码+调试部署 java计算机毕业设计工作流流程编辑OA系统MyBatis+系统+LW文档+源码+调试部署 本源码技术栈: ...
- java响应式交友网站计算机毕业设计MyBatis+系统+LW文档+源码+调试部署
java响应式交友网站计算机毕业设计MyBatis+系统+LW文档+源码+调试部署 java响应式交友网站计算机毕业设计MyBatis+系统+LW文档+源码+调试部署 本源码技术栈: 项目架构:B/S ...
- java计算机毕业设计web家庭财务管理系统MyBatis+系统+LW文档+源码+调试部署
java计算机毕业设计web家庭财务管理系统MyBatis+系统+LW文档+源码+调试部署 java计算机毕业设计web家庭财务管理系统MyBatis+系统+LW文档+源码+调试部署 本源码技术栈: ...
- java项目任务跟踪系统计算机毕业设计MyBatis+系统+LW文档+源码+调试部署
java项目任务跟踪系统计算机毕业设计MyBatis+系统+LW文档+源码+调试部署 java项目任务跟踪系统计算机毕业设计MyBatis+系统+LW文档+源码+调试部署 本源码技术栈: 项目架构:B ...
- java计算机毕业设计数字家谱管理系统设计与实现MyBatis+系统+LW文档+源码+调试部署
java计算机毕业设计数字家谱管理系统设计与实现MyBatis+系统+LW文档+源码+调试部署 java计算机毕业设计数字家谱管理系统设计与实现MyBatis+系统+LW文档+源码+调试部署 本源码技 ...
- java计算机毕业设计个性化穿搭推荐系统MyBatis+系统+LW文档+源码+调试部署
java计算机毕业设计个性化穿搭推荐系统MyBatis+系统+LW文档+源码+调试部署 java计算机毕业设计个性化穿搭推荐系统MyBatis+系统+LW文档+源码+调试部署 本源码技术栈: 项目架构 ...
- java计算机毕业设计红色景点自驾游网站管理系统MyBatis+系统+LW文档+源码+调试部署
java计算机毕业设计红色景点自驾游网站管理系统MyBatis+系统+LW文档+源码+调试部署 java计算机毕业设计红色景点自驾游网站管理系统MyBatis+系统+LW文档+源码+调试部署 本源码技 ...
- java计算机毕业设计高校体育器材及场地管理MyBatis+系统+LW文档+源码+调试部署
java计算机毕业设计高校体育器材及场地管理MyBatis+系统+LW文档+源码+调试部署 java计算机毕业设计高校体育器材及场地管理MyBatis+系统+LW文档+源码+调试部署 本源码技术栈: ...
最新文章
- 【Java】6.9 枚举类
- scala学习笔记-Map与Tuple(10)
- 【原创中】儿子,听爸爸跟你说
- 【转】UITableView详解(UITableViewCell
- 如何制作印章_如何用Photoshop制作个性印章/文字图片
- PowerDesigner建数据库模型增加自定义扩展属性
- 二十五还是单身的十大原因
- 计算机科学家 收入,你离年薪100万的数据科学家还差10个“码农”
- Go 语言接口详解(一)
- Python学习笔记第二十四周(JavaScript补充)
- wxPython 入门教程.
- MySQL数据库安装教程
- 使用 spire.xls 免费版 excel 转换成 pdf
- Excel: 批量去除空格的函数——trim函数, substitute函数,clean函数
- Java实现腾讯企业邮箱收发邮件
- 小游戏流量变现瓶颈,新增长点是超级App?
- ie浏览器出现代理服务器没有响应
- 怎么区分zh和ch_怎样区分zh,ch,sh与z,c,s
- 【无标题】线性代数的可用之地----图像的矩阵表示之浅看
- 昆明半程马拉松:1名选手死亡5名选手昏迷(图)