如何在Csplitterwnd的某个pane中,动态切换view.

解决方案 »

  1.   

    代码如下:
    =======
    BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) 
    {
    // TODO: Add your specialized code here and/or call the base class
    m_splitter_left_right.CreateStatic(this,1,2);
    m_splitter_left_right.CreateView(0,0,RUNTIME_CLASS(CLeftBarView),CSize(150,0),pContext);
    m_splitter_left_right.CreateView(0,1,RUNTIME_CLASS(CDEMOView),CSize(0,0),pContext);
    /// Create views=============================
    p_classview=new CClassView;
    p_studentview=new CStudentView;
    p_loadview=new CLoadView;

    p_loadview->Create(NULL,NULL,AFX_WS_DEFAULT_VIEW,CRect(0,0,0,0),
    &m_splitter_left_right,AFX_IDW_PANE_FIRST+1,NULL); //=========================================== return TRUE;//CFrameWnd::OnCreateClient(lpcs, pContext);
    }
    ======================
    void CMainFrame::OnDatamgLoad() 
    {
    CView * p_view=GetActiveView();

    //set ctrl id
    p_view->SetDlgCtrlID(p_loadview->GetDlgCtrlID());
    p_loadview->SetDlgCtrlID(AFX_IDW_PANE_FIRST);
    p_view->ShowWindow(SW_HIDE);
    p_loadview->ShowWindow(SW_SHOW);
    m_splitter_left_right.SetActivePane(0,1,p_loadview);
    //SetActiveView(p_loadview);
    RecalcLayout();
    //...........
    // TODO: Add your command handler code here

    }
    =======
      

  2.   

    这样出来的,只是左边那个pane被换掉了,我需要的,是换右边那个pane
      

  3.   

    example:
    http://www.codeguru.com/splitter/SplitterTog.shtml
      

  4.   

    ??? 不会呀。现在右边的View换不掉啊。
      

  5.   

    我也想用这个,但我换的是左边的,楼主可否发左边的给鹅,鹅谢谢了。
    [email protected]
      

  6.   

    p_classview=new CClassView;
    p_studentview=new CStudentView;
    p_loadview=new CLoadView;

    p_loadview->Create(NULL,NULL,AFX_WS_DEFAULT_VIEW,CRect(0,0,0,0),
    &m_splitter_left_right,AFX_IDW_PANE_FIRST+1,NULL);一般来说,不应当用new的方法生成view对象。应当用CSplitterWnd::CreateView生成view,你好像想动态改变每一个pane上的view,我知道有两种方法肯定可以做到:1.生成5个列,然后用CreateView生成每一个view。然后把没有用的view用ShowWindow隐藏。
    m_splitter_left_right.CreateStatic(this,1,5);
    不过需要处理一些细节问题,你可以看CSplitterWnd的源代码。
    2.使用MDI界面,不要替换pane上的view,而是为每一组view生成一个ChildFrame,然后用CFrameWnd::ActiveFrame来显示子框架,这个方法最可靠。还有一种方法不知道行不行:
    在你的CMainFrame::OnDatamgLoad重新干下面事情:
    m_splitter_left_right.CreateStatic(this,1,2);
    m_splitter_left_right.CreateView(0,0,RUNTIME_CLASS(CLeftBarView),CSize(150,0),pContext);
    m_splitter_left_right.CreateView(0,1,RUNTIME_CLASS(CDEMOView),CSize(0,0),pContext);
    其中pContext可以自己创建,关联当前的视。