我在做实验是要用到在一个单文档应用程序中,点击菜单,切换不同的视图,视图不需要进行分割。已经在网上查看过一些资料,但还是不太明白,希望高手不吝赐教。能够具体讲一讲思路和需要用到什么类,如果有资料希望可以和我分享一下,不胜感激。

解决方案 »

  1.   

    OnCreateClient中先分割好视图,然后通过显示和隐藏来模拟你想要的效果
      

  2.   

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

  3.   

    6楼说的没错,方法是比较古老。
    可以一个Doc类添加多个View类,使用共同的一个客户窗口(楼主大概是这个意思)。通过菜单选项等方式切换不同的活跃的View,每个View又都有自己的OnDraw(),这样不同的View就会在窗口绘出不同的内容。
      

  4.   

    一个窗口一个View,每个窗口显示不同的视图不是更好吗?为什么非要在一个窗口里面切来切去的显示呢?