最好能提供一个例子,谢谢帮忙。网上找到的都是切分窗口中切换视

解决方案 »

  1.   

    在MainFrm中,定义View类的指针,然后在CreatClient函数中,加入如下代码:
    m_pRTHelloView = new CRTHelloView;
    m_pRTHelloView->Create(NULL, NULL, 0L, rect, this, VIEW_HELLO, pContext);
    SetActiveView(m_pRTHelloView);
    m_pRTHelloView->ShowWindow(SW_SHOW);
    m_pRTHelloView->SetDlgCtrlID(AFX_IDW_PANE_FIRST);
    m_nCurrentViewID = VIEW_HELLO;m_pRTTableView = new CRTTableView;
    m_pRTTableView->Create(NULL, NULL, 0L, rect, this, VIEW_TABLE, pContext);
    m_pRTTableView->ShowWindow(SW_HIDE);
    m_pRTTableView->SetDlgCtrlID(VIEW_TABLE);
    然后定义SwitchView函数:
    CView* pOldActiveView = GetActiveView();
    CView* pNewActiveView = NULL;
    CView* pOtherView1=NULL;switch (nView)
    {
    case VIEW_TABLE:
            pNewActiveView = (CView*) m_pRTTableView;
            pOtherView1=(CView*)m_pRTHelloView;
    case     VIEW_HELLO:
            pNewActiveView = (CView*)m_pRTHelloView;
            pOtherView2=(CView*)m_pRTTableView;
    }
    if (pNewActiveView)
    {
       if (pOldActiveView == pNewActiveView) return;
       SetActiveView(pNewActiveView);
       pNewActiveView->ShowWindow(SW_SHOW);
       pNewActiveView->SetDlgCtrlID(AFX_IDW_PANE_FIRST);
       pOtherView1->ShowWindow(SW_HIDE);
       pOtherView1->SetDlgCtrlID(m_nCurrentViewID);
    }
    然后定义按钮的消息响应函数:
    如:
    OnTable()
    { UINT nView = 0;
    nView = VIEW_TABLE;
    SwitchToView(nView);
    }
    OnHello()
    { UINT nView = 0;
    nView = VIEW_HELLO;
    SwitchToView(nView);
    }        
      

  2.   

    上面代码似乎不适用于FormView,目前还没有找到解决方法。
      

  3.   

    FormView的问题也已解决,重载FormView的Create函数即可
      

  4.   


    void CMainFrame::OnViewSwitch() 
    {
    CDocument* pDoc = GetActiveDocument();
    CView* pCurrView=GetActiveView();

    // CView* pNewView; if(m_nCurrentView ==0)
    {
    /*
    pNewView =(CView*) new CGenerateView;
    m_nCurrentView =1;
    */
    if(m_pGenerateView ==NULL)
    {
    m_pScheduleSimView =pCurrView;
    m_pGenerateView =(CView*) new CGenerateView;
    m_pGenerateView->Create(NULL,NULL,AFX_WS_DEFAULT_VIEW,rectDefault,this,AFX_IDW_PANE_FIRST+1,NULL);
    int nId = m_pGenerateView->GetDlgCtrlID();
    m_pGenerateView->SetDlgCtrlID(AFX_IDW_PANE_FIRST);
    m_pScheduleSimView->SetDlgCtrlID(nId);
    m_pGenerateView->OnInitialUpdate();
    m_pGenerateView->ShowWindow(SW_SHOW);
    pCurrView->ShowWindow(SW_HIDE);
    pDoc->AddView(m_pGenerateView);
    }
    else
    {
    int nId = m_pGenerateView->GetDlgCtrlID();
    m_pGenerateView->SetDlgCtrlID(AFX_IDW_PANE_FIRST);
    m_pScheduleSimView->SetDlgCtrlID(nId);
    m_pGenerateView->ShowWindow(SW_SHOW);
    pCurrView->ShowWindow(SW_HIDE);

    }

    SetActiveView(m_pGenerateView);
    m_nCurrentView =1;

    }
    else
    {
    /* pNewView =(CView*) new CScheduleSimView;
    m_nCurrentView =0;
    */
    int nId = m_pScheduleSimView->GetDlgCtrlID();
    m_pScheduleSimView->SetDlgCtrlID(AFX_IDW_PANE_FIRST);
    m_pGenerateView->SetDlgCtrlID(nId);
    m_pScheduleSimView->ShowWindow(SW_SHOW);
    m_pGenerateView->ShowWindow(SW_HIDE);
    SetActiveView(m_pScheduleSimView);
    m_nCurrentView =0;
    }
    /* pNewView->Create(NULL,NULL,AFX_WS_DEFAULT_VIEW,rectDefault,this,AFX_IDW_PANE_FIRST,NULL);
    pNewView->OnInitialUpdate(); pNewView->ShowWindow(SW_SHOW);
    pCurrView->ShowWindow(SW_HIDE); pDoc->AddView(pNewView);
    pDoc->RemoveView(pCurrView); SetActiveView(pNewView);
    RecalcLayout();
    */
    RecalcLayout();
    }