一种限制MFC MDI架构中某类型文档个数的方法
稍微复杂一点的MFC程序,一般采用MDI架构来实现。有时会有这种需求,比如对于某一个功能,在程序中仅需要一个文档对象就够了(一个文档对应一个相应的MDI子框架对象)。最近在做一个工具的时候就遇到了这种需求。下面是自己想的一种方法:
void CtestmdiApp::OnFileNew() { POSITION pos = m_pDocManager->GetFirstDocTemplatePosition(); while (pos != NULL) { CDocTemplate* pDocTemp = m_pDocManager->GetNextDocTemplate(pos); POSITION docPos = pDocTemp->GetFirstDocPosition(); while(docPos != NULL) { CDocument* pDoc = pDocTemp->GetNextDoc(docPos); if (pDoc->IsKindOf(RUNTIME_CLASS(CtestmdiDoc))) { return; } break; } } CWinAppEx::OnFileNew(); }
即在创建文档的时候,截取创建消息,并从docManager中取得文档模板信息,并进而枚举出所有的已创建的文档对象进行判断,当找到该类型文档对象的时候,就返回;否则,即没找到的情况下,创建一个该类型的文档对象。