在单一文档结构下,可以有多个视图存在,以下代码实现了视图(CFormView为例)间的切换,
使用户在一个时间只能看到一个视图,并且能够切换到自己想要的视图。
要想看到自己想要的视图,只需为以下函数传递相应视图的ID号!
void CMainFrame::SwitchToForm(int nForm)
{
CView *pOldActiveView=GetActiveView();
CView *pNewActiveView=(CView*)GetDlgItem(nForm);
if(pNewActiveView==NULL)
{
if(nForm==IDD_LIBRARY_FORM)
{
pNewActiveView=(CView*)new CLibraryView;
}
if(nForm==IDD_BOOKINFO_FORM)
{
pNewActiveView=(CView*)new CBookInfoView;
}
if(nForm==IDD_PROVIDER_FORM)
{
pNewActiveView=(CView*)new CProviderView;
}
CCreateContext context;
context.m_pCurrentDoc=pOldActiveView->GetDocument();
pNewActiveView->Create(NULL,NULL,0L,CFrameWnd::rectDefault,this,nForm,&context);
pNewActiveView->OnInitialUpdate();
}
SetActiveView(pNewActiveView);
pNewActiveView->ShowWindow(SW_SHOW);
pOldActiveView->ShowWindow(SW_HIDE);
int ID;
if(pOldActiveView->GetRuntimeClass()==RUNTIME_CLASS(CLibraryView))
ID=IDD_LIBRARY_FORM;
if(pOldActiveView->GetRuntimeClass()==RUNTIME_CLASS(CBookInfoView))
ID=IDD_BOOKINFO_FORM;
if(pOldActiveView->GetRuntimeClass()==RUNTIME_CLASS(CProviderView))
ID=IDD_PROVIDER_FORM;
pOldActiveView->SetDlgCtrlID(ID);
pNewActiveView->SetDlgCtrlID(AFX_IDW_PANE_FIRST);
RecalcLayout();
}