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

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

 2009-02-11 20:00:37 来源:WEB开发网   
核心提示: CDocTemplate还需完成对其对应文档的关闭与保存操作:BOOL CDocTemplate::SaveAllModified(){ POSITION pos = GetFirstDocPosition(); while (pos != NULL) {CDocument* pDoc =

CDocTemplate还需完成对其对应文档的关闭与保存操作:

BOOL CDocTemplate::SaveAllModified()
{
    POSITION pos = GetFirstDocPosition();
    while (pos != NULL)
    {
       CDocument* pDoc = GetNextDoc(pos);
       if (!pDoc->SaveModified())
           return FALSE;
    }
    return TRUE;
}
void CDocTemplate::CloseAllDocuments(BOOL)
{
    POSITION pos = GetFirstDocPosition();
    while (pos != NULL)
    {
       CDocument* pDoc = GetNextDoc(pos);
       pDoc->OnCloseDocument();
    }
}

前文我们提到,由于MFC的设计者将CSingleDocTemplate和CMultiDocTemplate的行为未进行规范的区分,它对仅仅对应一个文档的CSingleDocTemplate也提供了所谓的GetFirstDocPosition、GetNextDoc遍历操作,所以基类CDocTemplate的SaveAllModified和CloseAllDocuments函数(都是遍历)就可统一CSingleDocTemplate和CMultiDocTemplate两个本身并不相同类的SaveAllModified和CloseAllDocuments行为(实际上,对于CSingleDocTemplate而言,SaveAllModified和CloseAllDocuments中的“All”是没有太大意义的。教室里有1个老师和N个同学,老师可以对同学们说“所有同学”,而学生对老师说“所有老师”相信会被当成神经病)。MFC的设计者们特意使用了“将错就错”的方法意图简化CSingleDocTemplate和CMultiDocTemplate类的设计,读者朋友可以不认同他们的做法。

上一页  4 5 6 7 8 9 10  下一页

Tags:深入浅出 MFC 文档

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接