稍微复杂一点的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中取得文档模板信息,并进而枚举出所有的已创建的文档对象进行判断,当找到该类型文档对象的时候,就返回;否则,即没找到的情况下,创建一个该类型的文档对象。