开发学院软件开发VC 深入浅出MFC“文档/视图”架构(3)――文档 阅读

深入浅出MFC“文档/视图”架构(3)――文档

 2009-02-11 20:00:34 来源:WEB开发网   
核心提示: 在用户按下ID_FILE_OPEN及ID_FILE_NEW菜单(或工具栏)命令后,CWinApp(派生)类的OnFileNew、OnFileOpen函数首先被执行,深入浅出MFC“文档/视图”架构(3)――文档(9),其进行的行为是选择合适的文档模板,如图3.1所示,随着我们进一步阅读后续

在用户按下ID_FILE_OPEN及ID_FILE_NEW菜单(或工具栏)命令后,CWinApp(派生)类的OnFileNew、OnFileOpen函数首先被执行,其进行的行为是选择合适的文档模板,如图3.1所示。

深入浅出MFC“文档/视图”架构(3)――文档

图3.1文档模板的选择

实际上,图3.1中所示的“使用文件扩展名选择文档模板”、“是一个文档模板吗?”的行为都要借助于CDocManager类的相关函数,因为只有CDocManager类才维护了文档模板的列表。CDocManager::OnFileNew的行为可描述为:

void CDocManager::OnFileNew()
{
 if (m_templateList.IsEmpty())
 {
  ...
  return ;
 }
 //取第一个文档模板的指针
 CDocTemplate *pTemplate = (CDocTemplate*)m_templateList.GetHead();
 if (m_templateList.GetCount() > 1)
 {
  // 如果多于一个文档模板,弹出对话框提示用户选择
  CNewTypeDlg dlg(&m_templateList);
  int nID = dlg.DoModal();
  if (nID == IDOK)
   pTemplate = dlg.m_pSelectedTemplate;
  else
   return ;
  // none - cancel operation
 }
 …
 //参数为NULL的时候OpenDocument File会新建一个文件
 pTemplate->OpenDocumentFile(NULL);
}

之后,文档模板类的virtual CDocument* OpenDocumentFile(LPCTSTR lpszPathName, BOOL bMakeVisible = TRUE) = 0函数进行文档的创建工作,如果lpszPathName == NULL,是文档New行为;相反,则是Open行为。在创建框架后,文档模板根据是Open还是New行为分别调用CDocument的OnOpenDocument、OnNewDocument函数。图3.2描述了整个过程。

深入浅出MFC“文档/视图”架构(3)――文档

图3.2文档、框架窗口的创建顺序

而图3.3则给出了视图的创建过程。

深入浅出MFC“文档/视图”架构(3)――文档

图3.3视图的创建顺序

图3.1~3.3既描述了文档/视图框架对ID_FILE_OPEN及ID_FILE_NEW命令的响应过程,又描述了文档、框架窗口及视图的创建。的确,是无法单独描述文档的New和Open行为的,因为它和其他对象的创建交错纵横。

相信,随着我们进一步阅读后续连载,会对上述过程有更清晰的认识。

本文出自 “Inside SW,FW and HW R&D” 博客,请务必保留此出处http://21cnbao.blog.51cto.com/109393/120305

上一页  4 5 6 7 8 9 

Tags:深入浅出 MFC 文档

编辑录入:爽爽 [复制链接] [打 印]
[]
  • 好
  • 好的评价 如果觉得好,就请您
      0%(0)
  • 差
  • 差的评价 如果觉得差,就请您
      0%(0)
赞助商链接