深入浅出MFC“文档/视图”架构(3)――文档
2009-02-11 20:00:34 来源:WEB开发网UpdateAllViews函数遍历视图列表,对每个视图都调用其OnUpdate函数实现视图的更新显示。
2.文档的OPEN/NEW
从连载2可以看出,在应用程序类CWinapp的声明中包含文件的New和Open函数:
afx_msg void OnFileNew();
afx_msg void OnFileOpen();
而在文档模板管理者类CDocManager中也包含文件的New和Open函数:
virtual void OnFileNew();
virtual void OnFileOpen();
virtual CDocument* OpenDocumentFile(LPCTSTR lpszFileName); // open named file
而文档模板类CDocTemplate也不例外:
virtual CDocument* OpenDocumentFile(
LPCTSTR lpszPathName, BOOL bMakeVisible = TRUE) = 0;
// open named file
// if lpszPathName == NULL => create new file with this type
virtual CDocument* CreateNewDocument();
复杂的是,我们在CDocument类中再次看到了New和Open相关函数:
virtual BOOL OnNewDocument();
virtual BOOL OnOpenDocument(LPCTSTR lpszPathName);
在这众多的函数中,究竟文档的创建者和打开者是谁?“文档/视图”框架程序“File”菜单上的“New”和“Open”命令究竟对应着怎样的函数调用行为?这一切都使我们陷入迷惘!
实际上“文档/视图”框架程序新文档及其关联视图和框架窗口的创建是应用程序对象、文档模板、新创建的文档和新创建的框架窗口相互合作的结果。具体而言,应用程序对象创建了文档模板;文档模板则创建了文档及框架窗口;框架窗口创建了视图。
更多精彩
赞助商链接