void CxxxApp::SwitchView(int vid)
{
CFrameWnd* pFrame=(CFrameWnd*)m_pMainWnd;
CRuntimeClass* pNewView;
switch(vid)
{
default:
case 1:
pNewView=RUNTIME_CLASS(CxxxListView);
break;
case 2:
pNewView=RUNTIME_CLASS(CxxxKLineView);
break;
case 3:
pNewView=RUNTIME_CLASS(CxxxRealView);
break;
case 4:
pNewView=RUNTIME_CLASS(CxxxTradListView);
break;
case 5:
pNewView=RUNTIME_CLASS(CxxxHtml);
break;
}
ASSERT(pFrame);
ASSERT(pNewView);
// 獲取當前的視圖。
CView* pCurrentView = pFrame->GetActiveView();
CRect rcView;
if(pCurrentView!=NULL)
{
//嵌套了VIEW
CWnd *p=pCurrentView->GetParent();
if(p->IsKindOf(RUNTIME_CLASS(CxxxMutiView)))
pCurrentView=(CView*)p;
//如果要轉化的視圖和當前視圖爲同一類型,就直接退出。
if (pCurrentView->IsKindOf(pNewView))
{
pCurrentView->OnInitialUpdate();
return;
}
// 保存當前視圖的位置。
pCurrentView->GetWindowRect(&rcView);
pCurrentView->DestroyWindow();
}
// 創建新的上下文。
CCreateContext context;
context.m_pCurrentFrame = NULL;
context.m_pLastView = NULL;
context.m_pNewDocTemplate = NULL;
// context.m_pCurrentDoc = pDoc;
context.m_pNewViewClass = pNewView;
// 創建視圖。
CView* pNewCreateView = static_cast<CView*>(pFrame->CreateView(&context));
CurHWnd=pNewCreateView->m_hWnd;
// 移動新視圖到原來視圖的位置。
pFrame->ScreenToClient(&rcView);
pNewCreateView->OnInitialUpdate();
pNewCreateView->MoveWindow(&rcView);
pFrame->SetActiveView(pNewCreateView);
// 更新。
SetSocketCmd(vid);
// pFrame->InitialUpdateFrame(pDoc, TRUE);
// pFrame->MoveWindow(0,0,1024,768);//最大化
}