MFC MDI项目如何一个文档显示多个不同视图类(比如文字和图表,各自拥有单独的框架窗口)

先上图:每个视图都有自己独自的完全窗口,可关闭可最大最小化。

不是那种Splitter窗口。

直接用MFC的MDI或SDI向导是出不来这种效果的。

你可以用同一份文档中的数据在不同窗口显示文本或图表,可以有若干表示方式。

例子里是在窗口1里用鼠标画图,黑白显示。数据存入文档的同时,调用

pDoc->UpdateAllViews(this);

其它视图窗口同步显示定制化的不同颜色的同样图形。


MFC MDI项目如何一个文档显示多个不同视图类(比如文字和图表,各自拥有单独的框架窗口)_第1张图片

实施步骤:

1,新建一个菜单项,这里是Window-->ColorView

2,新建立不同的视图类,这里是CMdiColorView,在其OnDraw函数里可以根据需要显现不同的视图。这里简化成带入不同颜色的画笔,以示区分。

3,CMainFrame类中响应该命令消息,在该函数内完成新建并加入文档模板,以及生成基于此新文档模板的子框架窗口,新视图在此窗口呈现。

代码如下:

void CMainFrame::OnDrawColor()
{
	// TODO: Add your command handler code here
	static CMultiDocTemplate* pDocTemple_Color;
	static BOOL bChildCreated = FALSE;
	if (FALSE == bChildCreated)
	{
		pDocTemple_Color = new CMultiDocTemplate(
			IDR_MdiGraphicTYPE,
			RUNTIME_CLASS(CMdiGraphicDoc),
			RUNTIME_CLASS(CChildFrame),
			RUNTIME_CLASS(CMdiColorView));
		if (!pDocTemple_Color)
		{
			AfxMessageBox(_T("Can't Create new MultiDocTemplate!\n"));
			return ;
		}
		AfxGetApp()->AddDocTemplate(pDocTemple_Color);

		CMDIChildWnd* pChildActive = MDIGetActive();
		CMdiGraphicDoc* pDoc = (CMdiGraphicDoc*)pChildActive->GetActiveDocument();
		CMDIChildWnd* pColorChild = (CMDIChildWnd*)pDocTemple_Color->CreateNewFrame(
									pDoc,NULL);
		if (!pColorChild)
		{
			AfxMessageBox(_T("Can't Create new Child Frame!\n"));
			return;
		}
		pDocTemple_Color->InitialUpdateFrame(pColorChild, pDoc);
		MDITile(MDITILE_ZORDER);
	}
}

MFC MDI项目如何一个文档显示多个不同视图类(比如文字和图表,各自拥有单独的框架窗口)_第2张图片

你可能感兴趣的:(VC++)