每个视都是从窗口类(CWnd)派生,因此可以用ShowWindow函数,
此函数可以设置参数,隐藏视图1,显示视图2,实现了切换.

解决方案 »

  1.   

    但是另一个视图是派生于CDialog,怎么半?
      

  2.   

    哈哈,CDialog也是从CWnd派生的啊!!
    其实你要是看一看分割窗口的例子,
    对切换视图会有很好的理解!!
    好运!!!
      

  3.   

    BOOL CImpDlg::CreateWnd(CWnd* pParent,CRect rcC)
    {
    BOOL f=CDialog::Create(CImpDlg::IDD,pParent);
    MoveWindow(rcC);
    ShowWindow(SW_SHOW);
    return f;
    }在初始化是
    m_ed.CreateWnd(this,rcC);
    m_ed.ShowWindow(SW_HIDE);
    切换时
          m_ed.ShowWindow(SW_SHOW);
    但总是另外弹出对话框,还有什么我没考虑到的?
      

  4.   

    自定义切换函数:例如下面两个在菜单选择下选择不同的视图,例子中有两个视图:
    void CMainFrame::ChangeForm(int nForm)
    {
    CView * pOldActiveView=GetActiveView();
    CView * pNewActiveView=(CView *)GetDlgItem(nForm);
    if (pNewActiveView==NULL)
    {
    switch(nForm)
    {
    case IDW_ORDER_FORM:
    pNewActiveView = (CView*)new CProdView;
    break;
    case IDW_CUST_FORM:
    pNewActiveView = (CView*)new CCustView;
    break;
    }
    CCreateContext context;
    context.m_pCurrentDoc=pOldActiveView->GetDocument();
    pNewActiveView->Create(NULL,NULL,0L,CFrameWnd::rectDefault,this,nForm,&context);
    pNewActiveView->OnInitialUpdate();
    }
    SetActiveView(pNewActiveView);
    pNewActiveView->ShowWindow(SW_SHOW);
    pOldActiveView->ShowWindow(SW_HIDE);
    if(pOldActiveView->GetRuntimeClass()==RUNTIME_CLASS(CProdView))
    pOldActiveView->SetDlgCtrlID(IDW_ORDER_FORM);
    else
    if(pOldActiveView->GetRuntimeClass()==RUNTIME_CLASS(CCustView))
    pOldActiveView->SetDlgCtrlID(IDW_CUST_FORM);
    pNewActiveView->SetDlgCtrlID(AFX_IDW_PANE_FIRST);
    RecalcLayout();
    }void CMainFrame::OnCustomer() 
    {
    // TODO: Add your command handler code here
    if(GetActiveView()->IsKindOf(RUNTIME_CLASS(CCustView)))
      return;
    ChangeForm(IDW_CUST_FORM);

    }void CMainFrame::OnUpdateCustomer(CCmdUI* pCmdUI) 
    {
    // TODO: Add your command update UI handler code here
    pCmdUI->SetCheck(GetActiveView()->IsKindOf(RUNTIME_CLASS(CCustView)));
    }void CMainFrame::OnProduct() 
    {
    // TODO: Add your command handler code here
        if(GetActiveView()->IsKindOf(RUNTIME_CLASS(CProdView)))
    return;
    ChangeForm(IDW_ORDER_FORM);
    }void CMainFrame::OnUpdateProduct(CCmdUI* pCmdUI) 
    {
    // TODO: Add your command update UI handler code here
       pCmdUI->SetCheck(GetActiveView()->IsKindOf(RUNTIME_CLASS(CProdView)));
    }