下面是我的代码,使用的是静态分割,第一次创建的时候是正常的,可是Destroy掉以后要再次创建就不行了,是不是需要用动态分割啊??还是代码哪里写的不对??该如何做??还有就是静态分割和动态分割的区别在哪呢(偶概念上不大清楚)??? m_pFrameMB = new CChildFrame();
CCreateContext m_Context;
if(!m_pFrameMB->LoadFrame(IDI_MB,WS_MAXIMIZE | WS_OVERLAPPEDWINDOW, NULL, &m_Context))
return;

if(wndSplitter.CreateStatic(this->m_pFrameMB,1,2)==NULL) 
      return;
 
    wndSplitter.CreateView(0,0,RUNTIME_CLASS(CView1),CSize(100,100), &m_Context); 
    wndSplitter.CreateView(0,1,RUNTIME_CLASS(CView2),CSize(100,100), &m_Context); 
m_pFrameMB->ShowWindow(SW_SHOWMAXIMIZED);
m_pFrameMB->InitialUpdateFrame(NULL, true);

解决方案 »

  1.   

    你可以参考以下代码
    enum eView { STRING = 1, HEX = 2 };
    void SwitchToView(eView nView);
    void CMainFrame::SwitchToView(eView nView)
    {
        CView* pOldActiveView = GetActiveView();
        CView* pNewActiveView = (CView*) GetDlgItem(nView);
        if (pNewActiveView == NULL) {
            switch (nView) {
            case STRING:
                pNewActiveView = (CView*) new CStringView;
                break;
            case HEX:
                pNewActiveView = (CView*) new CHexView;
                break;
            }
            CCreateContext context;
            context.m_pCurrentDoc = pOldActiveView->GetDocument();
            pNewActiveView->Create(NULL, NULL, WS_BORDER,
                CFrameWnd::rectDefault, this, nView, &context);
            pNewActiveView->OnInitialUpdate();
        }
        SetActiveView(pNewActiveView);
        pNewActiveView->ShowWindow(SW_SHOW);
        pOldActiveView->ShowWindow(SW_HIDE);
        pOldActiveView->SetDlgCtrlID(
            pOldActiveView->GetRuntimeClass() == 
            RUNTIME_CLASS(CStringView) ? STRING : HEX);
        pNewActiveView->SetDlgCtrlID(AFX_IDW_PANE_FIRST);
        RecalcLayout();
    }----------------------
                May you succeed!
                       ------------------------
      

  2.   

    添加两个BOOL类型的控制变量
    BOOL m_IsSplitter;
    BOOL m_bToggle;在构造函数中进行初始化
    m_bToggle = TRUE;
    m_IsSplitter = FALSE;创建Splitter
    BOOL CChildFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
    {
    RECT rc;
    int FrmW,FrmH;

    GetClientRect(&rc);
    FrmW = rc.right - rc.left + 1;
    FrmH = rc.bottom - rc.top + 1;

    //VERIFY
    m_wndSplitter.CreateStatic(this, 2, 1);

    m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CSppMuView),
    CSize(FrmW,FrmH/2), pContext);
    m_wndSplitter.CreateView(1, 0, RUNTIME_CLASS(CBottomView),
    CSize(0,0), pContext); m_IsSplitter = TRUE;          //注意一下,呵呵
    return TRUE;
    }在工具栏添加一个按钮为其添加消息映射,其函数如下
    void CChildFrame::OnExchange() 
    {
    // TODO: Add your command handler code here
    HWND hWnd = m_wndSplitter.GetSafeHwnd();
    if( hWnd == NULL || !::IsWindow(hWnd) )
    {
    return;
    }

    m_bToggle = !m_bToggle; CRect rc;
    this->GetClientRect(&rc); int cyCur, cyMin;
    m_wndSplitter.GetRowInfo( 0, cyCur, cyMin ); if(m_bToggle)
    {
    //two view
    m_wndSplitter.SetRowInfo( 0, rc.Height() / 2, cyMin );
    }
    else
    {
    //one view
    m_wndSplitter.SetRowInfo( 0, rc.Height(), cyMin );
    }
    m_wndSplitter.RecalcLayout();
    }
    在ChildFrame中重载OnSize
    void CChildFrame::OnSize(UINT nType, int cx, int cy) 
    {
    CMDIChildWnd::OnSize(nType, cx, cy);

    // TODO: Add your message handler code here
    if(!m_IsSplitter)
    return; CRect rc;
    this->GetClientRect(&rc);

    int cyCur, cyMin;
    m_wndSplitter.GetRowInfo( 0, cyCur, cyMin );

    if(m_bToggle)
    {
    //two view
    m_wndSplitter.SetRowInfo( 0, rc.Height() / 2, cyMin );
    }
    else
    {
    //one view
    m_wndSplitter.SetRowInfo( 0, rc.Height(), cyMin );
    }
    m_wndSplitter.RecalcLayout();
    }
      

  3.   

    如果还不行看一下这个
    http://expert.csdn.net/Expert/topic/2193/2193941.xml?temp=.3967249
    应该和你的问题差不多----------------------
                May you succeed!
                       ------------------------
      

  4.   

    强烈推荐侯捷先生的《深入浅出MFC》,该书讲得十分清楚,我也照该书所说的做了,很好。没有出现你所说的问题。
    enjoy it!