用appWizard生成的单文档结构的应用程序默认之支持一文档一个是的情况,你如要显示多个视图。可观看VC++栏目中的单文档多时问题的答案,里面有详细的解答。其中我的答案是用SwitchView()来切换。你若还有问题,可发E-mail跟我联系。我可以给你一个例程序。我的E-mail([email protected])。

解决方案 »

  1.   

    这不就很简单吗?请看下面的代码
    在CSDIFrameWnd::OnCreateClient中加上
    m_pSplitterView = new CSplitterView;
    m_pSplitterView->Create(NULL, NULL, 0L, CFrameWnd::rectDefault, this, VIEW_SPLITTER, pContext);
    SetActiveView(m_pSplitterView);
    m_pSplitterView->ShowWindow(SW_SHOW);
    m_pSplitterView->SetDlgCtrlID(AFX_IDW_PANE_FIRST);
    m_nCurrentViewID = VIEW_SPLITTER; m_pListCtrlView = new CListCtrlView;
    ((CView*) m_pListCtrlView)->Create(NULL, NULL, 0L, CFrameWnd::rectDefault, this, VIEW_LISTCTRL, pContext);
    m_pListCtrlView->ShowWindow(SW_HIDE);
    m_pListCtrlView->SetDlgCtrlID(VIEW_LISTCTRL); m_pEditCtrlView = new CEditCtrlView;
    ((CView*) m_pEditCtrlView)->Create(NULL, NULL, 0L, CFrameWnd::rectDefault, this, VIEW_EDIT, pContext);
    m_pEditCtrlView->ShowWindow(SW_HIDE);
    m_pEditCtrlView->SetDlgCtrlID(VIEW_EDIT);m_pSplitterView,m_pEditCtrlView,m_pListCtrlView为分别不同的视,但要注意AFX_IDW_PANE_FIRST这个参数,要显示的那个视的ID就要设为它。例如切换视: CView* pOldActiveView = GetActiveView();
    CView* pNewActiveView = NULL; switch (nView)
    {
    case VIEW_SPLITTER:
    pNewActiveView = (CView*) m_pSplitterView;
    break; case VIEW_LISTCTRL:
    pNewActiveView = (CView*) m_pListCtrlView;
    break;
    case VIEW_EDIT:
    pNewActiveView = (CView*) m_pEditCtrlView;
    break;
    } if (pNewActiveView)
    {
    // don't switch when views are the same
    if (pOldActiveView == pNewActiveView) return; SetActiveView(pNewActiveView);
    pNewActiveView->ShowWindow(SW_SHOW);
    pNewActiveView->SetDlgCtrlID(AFX_IDW_PANE_FIRST);
    pOldActiveView->ShowWindow(SW_HIDE);
    pOldActiveView->SetDlgCtrlID(m_nCurrentViewID);
    m_nCurrentViewID = nView; RecalcLayout();
    }还有记得把所有的视与你的CDocument相关联,CDocument::AddView
      

  2.   

    多谢二位的答复。我是刚刚接触VC++,如果JJONY回复在代码后加点
    说明,我想阅读将会更加方便。
    我将于panda_w的回复单独联系吧,我想他会给我教好的答复。
    再次感谢二位。