多文档、多视图的切换
void
CMainFrame::SwitchView(CMultiDocTemplate
*
pDocTemplate)
...
{
CDocument* pDoc = NULL;
POSITION pos = pDocTemplate->GetFirstDocPosition();
CView* pActiveView = GetActiveFrame()->GetActiveView();
if( pos == NULL )
...{
// create new document
pDoc = (CTouchNetDoc*)pDocTemplate->OpenDocumentFile(NULL);
}
else
...{
while (pos) 
...{
// get the document object
pDoc = pDocTemplate->GetNextDoc(pos);
POSITION pos2 = pDoc->GetFirstViewPosition();
if (pos2) 
...{
CView *pView = pDoc->GetNextView(pos2);
CFrameWnd* pNewFrame = pView->GetParentFrame();
ASSERT(pNewFrame);
if ( pNewFrame->GetParentFrame() == this )
break;
}
}
if ( pDoc == NULL )
pDoc = (CTouchNetDoc*)pDocTemplate->OpenDocumentFile(NULL);
}
// find the target view object of pDoc
CView *pTargetView = NULL;
pos = pDoc->GetFirstViewPosition();
while (pos) 
...{
CView *pView = pDoc->GetNextView(pos);
if ( pView )
...{
pTargetView = pView;
break;
}
}
if (pTargetView)
...{
if ( pActiveView != pTargetView )
...{
// show the frame window of target view.
CFrameWnd* pNewFrame = (CFrameWnd* )pTargetView->GetParentFrame();
pNewFrame->ActivateFrame();
pNewFrame->SetActiveView(pTargetView);
pTargetView->OnInitialUpdate();
//call pTargetView to do something
}
}
}
单文档、多视图的切换
void
CMainFrame::SwitchView(
const
int
nViewId)
...
{
CView* pOldView = GetActiveView();
CDocument* pDoc = pOldView->GetDocument();
CCreateContext context;
context.m_pCurrentDoc = pDoc;
CView* pNewView = NULL;
switch(nViewId)
...{
case eBrowseView:
context.m_pNewViewClass = RUNTIME_CLASS(CBView1);
break;
case eHttpView:
context.m_pNewViewClass = RUNTIME_CLASS(CView2);
break;
default:
break;
}
pNewView = (CView*)CreateView(&context);
SetActiveView(pNewView);
pNewView->ShowWindow(SW_SHOW);
pOldView->ShowWindow(SW_HIDE);
// call pNewView to do something 
pOldView->DestroyWindow();
RecalcLayout();
}
本文介绍了两种视图切换的方法:一种适用于多文档、多视图环境,通过定位目标视图并激活相应的窗口来完成切换;另一种适用于单文档、多视图场景,通过创建新的视图类实例,并设置为活动视图实现切换。

1288

被折叠的 条评论
为什么被折叠?



