版权声明:原创博文,转载请注明出处! https://blog.csdn.net/sunriver2000/article/details/84191086
多文档系列
问题
如题。
解决方法:
1、MFC多文档工程,手动添加CNaviMarkView与CNaviMarkDoc类。
CNaviMarkView继承至CFormView,CNaviMarkDoc继承至CDocument。
2、在MainFrm.h中包含上述两个头文件。
3、在MainFrm.cpp的OnCreate函数中调用CreateNaviMarkDocTemplate()函数,函数定义如下。
void CMainFrame::CreateNaviMarkDocTemplate()
{
m_pNaviMarkTemplate = new CMultiDocTemplate(IDR_MAINFRAME, RUNTIME_CLASS(CNaviMarkDoc), RUNTIME_CLASS(CChildFrame), RUNTIME_CLASS(CNaviMarkView));
theApp.AddDocTemplate(m_pNaviMarkTemplate);
}
4、创建视图的方法。
if (GetDlg()->m_pNaviMarkDoc[i] == NULL)
{
ShowNaviMarkView(i, str);
}
else
{
pos1 = GetDlg()->m_pNaviMarkTemplate->GetFirstDocPosition();
while (pos1)
{
pDoc = GetDlg()->m_pNaviMarkTemplate->GetNextDoc(pos1);
if (pDoc == GetDlg()->m_pNaviMarkDoc[i])
{
pos2 = pDoc->GetFirstViewPosition();
if (pos2)
{
pView = pDoc->GetNextView(pos2);
pView->GetParentFrame()->BringWindowToTop();
}
}
}
}
ShowNaviMarkView()函数定义。
void CMainFrame::ShowNaviMarkView(int nId, CString strTitle)
{
CMultiDocTemplate *pDocTemplate;
CNaviMarkDoc *pDoc;
CFrameWnd *pFrame;
//创建文档及视图
pDocTemplate = GetDlg()->m_pNaviMarkTemplate;
pDoc = (CNaviMarkDoc *)pDocTemplate->CreateNewDocument();
GetDlg()->m_pNaviMarkDoc[nId] = pDoc;
ASSERT_VALID(pDoc);
//传递数据
pDoc->m_nId = nId;
pDoc->m_strTitle = strTitle;
pFrame = pDocTemplate->CreateNewFrame(pDoc, NULL);
ASSERT_VALID(pFrame);
pDoc->OnNewDocument();
pDocTemplate->InitialUpdateFrame(pFrame, pDoc, true);
}