SDI 視圖切換函數

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);//最大化

}

發佈了32 篇原創文章 · 獲贊 4 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章