MFC多文档(三):文档与视图绑定

版权声明:原创博文,转载请注明出处! https://blog.csdn.net/sunriver2000/article/details/84191086

多文档系列

MFC多文档(一):视图中获取文档指针

MFC多文档(二):文档中获取视图指针

MFC多文档(三):文档与视图绑定

 

问题

如题。

解决方法:

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);
}

猜你喜欢

转载自blog.csdn.net/sunriver2000/article/details/84191086