CDocument *pDoc = GetActiveDocument();
CView *pOldView = GetActiveView();
CView *pNewView = (CView*)new courseview;//第一个VIEW
pNewView->Create(NULL,"Fac",AFX_WS_DEFAULT_VIEW,
rectDefault,this,AFX_IDW_PANE_FIRST,NULL);
pNewView->OnInitialUpdate();
pNewView->ShowWindow(SW_SHOW);
pOldView->ShowWindow(SW_HIDE);
pDoc->AddView(pNewView);
pDoc->RemoveView(pOldView);
SetActiveView(pNewView);
RecalcLayout();运行之后会出错,救命啊

解决方案 »

  1.   

    用这个东东吧CSplitterWnd,它可以帮助你的实现你想实现的!
      

  2.   

    可以提供例程,需要将你的要求和email发成短消息给我!
      

  3.   

    CMultiDocTemplate* pDocTemplate;
    pDocTemplate = new CMultiDocTemplate(
    IDR_MULPAITYPE,
    RUNTIME_CLASS(CMulPaintDoc),
    RUNTIME_CLASS(CChildFrame), // custom MDI child frame
    RUNTIME_CLASS(CMulPaintView));
    AddDocTemplate(pDocTemplate);

    pDocTemplate = new CMultiDocTemplate(
    IDR_MULTEXT,
    RUNTIME_CLASS(CTextDoc),
    RUNTIME_CLASS(CChildFrame), // custom MDI child frame
    RUNTIME_CLASS(CMyEditView));
    AddDocTemplate(pDocTemplate);
      

  4.   

    既称切换,View应已存在,可如下遍历每个View
    POSITION pos=GetFirstViewPosition();
    while(pos!=NULL)
    {
        CView *pView=GetNextView(pos);
        //在此判断该View是否为你需要的,是则SetActiveView(...);}
      

  5.   

    http://www.codeproject.com/docview/switchingviews.asp
      

  6.   

    Visual C++ 技术内幕上有例子,使用子窗口技术。
      

  7.   

    定义框架窗口:
    class CRightPaneFrame : public CFrameWnd在框架窗口的OnCreateClient事件中
    建立各视如:
    BOOL CRightPaneFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
    {
    m_oneView = new ConeView;
    m_oneView->Create(NULL, NULL, 0L, CFrameWnd::rectDefault, this, VIEW_ONE, pContext);
    SetActiveView(m_oneView);
    m_oneView->ShowWindow(SW_SHOW);
    m_oneView->SetDlgCtrlID(AFX_IDW_PANE_FIRST);
    m_nCurrentViewID = VIEW_1; m_twoView = new CtwoView;
    ((CView*) m_twoView)->Create(NULL, NULL, 0L, CFrameWnd::rectDefault, this, VIEW_2, pContext);
    m_twoView->ShowWindow(SW_HIDE);
    m_twoView->SetDlgCtrlID(VIEW_2);
             RecalcLayout();

    return TRUE;   
    }
    再定义一个切换函数如:
    void CRightPaneFrame::SwitchToView(UINT nView)
    {
    CView* pOldActiveView = NULL;
    CView* pNewActiveView = NULL; switch (nView)
    {
    case VIEW_1:
    pNewActiveView = (CView*) m_oneView;
    break; case VIEW_2:
    pNewActiveView = (CView*) m_towView;
    break;
        
    }   switch(m_nCurrentViewID) 
        { 
          case VIEW_1: 
                pOldActiveView = (CView*) m_oneView; 
               break; 
          case VIEW_2: 
               pOldActiveView = (CView*) m_twoView; 
               break; 
    } if (pNewActiveView) 
      { 
       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();
      }
    }需要切换的地方建立框架的实例,获得地址,调用,我的应用是在一个切分
    窗口里,所以这样切换:
    ...
    case CMD_00:
      nView = VIEW_1;
      break;
    case CMD_01:
      nView = VIEW_2;
      break;

    if (nView) 
    {
    CRightPaneFrame* m_rf;  
    m_rf = (CRightPaneFrame*)GetMainView()->m_wndSplitter.GetPane(0,1);
    m_rf->SwitchToView(nView);
    }注意,因为我这样建立视:
    m_oneView = new ConeView;
    所以需改
    class ConeView : public CView
    {
    DECLARE_DYNCREATE(ConeView)protected: //此处改为 public:
    ConeView();        
    virtual ~ConeView();
    ....罗嗦一些,不知你能否明白?