只是把一些成型的东西拿来
在许多的多视中都是动态的创建,切换的时候,以前创建的信息都丢失,使用下面的方法,可以动态的切换,原来的视对象信息同样的存在。
1、 首先创建一个 单文档的系统框架结构
2、 在主框架中定义两个对象
CViewOne * m_pMapView;
CViewTwo * m_pSceneView;
3、 在框架的中创建对象
m_pSceneView 作为第二个视
m_pSceneView = new CViewTwo();
m_pSceneView->Create(NULL, NULL, AFX_WS_DEFAULT_VIEW,
CRect(-100,-100,-50,-50), this, AFX_IDW_PANE_FIRST + 1, NULL);
//
使其不显示
m_pSceneView->ShowWindow(SW_HIDE);
4、 定义两个视窗的切换标志
enum
ViewStatus{MapView,DimView} ;
5、 视窗的切换
BOOL CMainFrame::ChangView(ViewStatus m_nView )
{
CView* pViewAdd;
CView* pViewRemove;
CDocument* pDoc = GetActiveDocument();
if(m_nView == m_nCurViewStatus )
return FALSE;
if((m_nView == DimView)&& (m_nCurViewStatus == MapView))
{
if (m_pSceneView == NULL)
{
m_pMapView = (CViewOne *)GetActiveView();
}
pViewAdd = m_pSceneView;
pViewRemove = m_pMapView;
m_nCurViewStatus= DimView;
}
else
{
pViewAdd = m_pMapView;
pViewRemove = m_pSceneView;
m_nCurViewStatus= MapView;
}
//
将活动视的child id设置为AFX_IDW_PANE_FIRST
//
将其它视设置为AFX_IDW_PANE_FIRST以外的值,
//
这样当调用CFrameWnd::RecalcLayout重新布局窗口时,
//
才会得到正确的视
int nSwitchChildID = pViewAdd->GetDlgCtrlID();
pViewAdd->SetDlgCtrlID(AFX_IDW_PANE_FIRST);
pViewRemove->SetDlgCtrlID(nSwitchChildID);
//
显示活动视而隐藏非活动视
pViewAdd->ShowWindow(SW_SHOW);
pViewRemove->ShowWindow(SW_HIDE);
//
将新的活动视连接到文档,并断开原来的视与文档的连接
pDoc->AddView(pViewAdd);
pDoc->RemoveView(pViewRemove);
SetActiveView(pViewAdd);
RecalcLayout();
return TRUE;
}