记地不太清楚。可以用DestoryWindow()和CreateView()配对切换切分窗口中显示的视。至于程序运行时的选择,应该可以在CMainFrame::OnCreateClient()方法的开始部分插入一段对话框交互代码来完成。

解决方案 »

  1.   

    Sorry, 用DeleteView和CreateView,好象这个问题你已经解决了。
      

  2.   

    这是一个手动切换FormView的方法,不用每次创建、删除。
    这里的例子是没有切分视的,原理应该差不多。
    void CMainFrame::SwitchToForm(int nForm)
    {
    CView* pOldActiveView = GetActiveView();
    CView* pNewActiveView = (CView*)GetDlgItem(nForm);
    if (pNewActiveView == NULL)
    {
    switch(nForm)
    {
    case IDW_BP_FORM:
    pNewActiveView = (CView*)new CBPForm;
    break;
    case IDW_LH_FORM:
    pNewActiveView = (CView*)new CLHForm;
    break;
    case IDW_FX_FORM:
    pNewActiveView = (CView*)new CFXForm;
    break;
    case IDW_XS_FORM:
    pNewActiveView = (CView*)new CXSForm;
    break;
    case IDW_EMPTY_FORM:
    pNewActiveView = (CView*)new CEmptyForm;
    break;
    default:
    pNewActiveView = (CView*)new CEmptyForm;
    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);
    //pOldActiveView->SetDlgCtrlID(pOldActiveView->GetRuntimeClass() == RUNTIME_CLASS(CCourseForm) ?IDW_COURSE_FORM : IDW_SECTION_FORM);
    if(pOldActiveView->GetRuntimeClass()==RUNTIME_CLASS(CBPForm))
    {
    pOldActiveView->SetDlgCtrlID(IDW_BP_FORM);
    }
    else if(pOldActiveView->GetRuntimeClass()==RUNTIME_CLASS(CLHForm))
    {
    pOldActiveView->SetDlgCtrlID(IDW_LH_FORM);
    }
    else if(pOldActiveView->GetRuntimeClass()==RUNTIME_CLASS(CFXForm))
    {
    pOldActiveView->SetDlgCtrlID(IDW_FX_FORM);
    }
    else if(pOldActiveView->GetRuntimeClass()==RUNTIME_CLASS(CXSForm))
    {
    pOldActiveView->SetDlgCtrlID(IDW_XS_FORM);
    }
    else if(pOldActiveView->GetRuntimeClass()==RUNTIME_CLASS(CCHForm))
    {
    pOldActiveView->SetDlgCtrlID(IDW_CH_FORM);
    }
    else if(pOldActiveView->GetRuntimeClass()==RUNTIME_CLASS(CEmptyForm))
    {
    pOldActiveView->SetDlgCtrlID(IDW_EMPTY_FORM);
    }
    pNewActiveView->SetDlgCtrlID(AFX_IDW_PANE_FIRST);
    RecalcLayout();
    }//手动切换,响应菜单(其中的一个)
    void CMainFrame::OnAdminBp() 
    {
    // TODO: Add your command handler code here
    if (GetActiveView()->IsKindOf(RUNTIME_CLASS(CBPForm)))
    return; // already active
    SwitchToForm(IDW_BP_FORM);
    }