如何实现窗口的任意分割
在网上找到很多代码
但是达不到要求
 要求是:
 首先静态创建1行两列
然后再将第一列分成两行但是在网上找到的代码
分割条全部重叠到了最左侧

解决方案 »

  1.   

    不会吧,CSplitterWnd类,msdn里说的很清楚,还有代码可看~建议仔细读读
      

  2.   

    wltg2001:已经回答了你,是你自己没有认真思考,没认真看文档!
    网上一大把的例子,本论坛里一搜也一大把,又不是三两行代码就解决问题的。很多vc的书里面都有,买一本或是网上下一本看一下就完成了。
      

  3.   


    CSplitterWnd m_wndSplitter;
    CSplitterWnd m_wndSplitter2;
    BOOL bSplitterWnd;CMainFrame::CMainFrame()
    {
     bSplitterWnd = FALSE; // 初始化为FALSE
    }BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) 
    {
    // TODO: Add your specialized code here and/or call the base class
    if(!m_wndSplitter.CreateStatic(this, 1, 2))
    return FALSE;
    if(!m_wndSplitter2.CreateStatic(&m_wndSplitter, 2, 1))
    return FALSE; if(!m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(CAAView), CSize(10, 10), pContext))
    return FALSE; if(!m_wndSplitter2.CreateView(0, 0, RUNTIME_CLASS(CAAView), CSize(10, 10), pContext))
    return FALSE; if(!m_wndSplitter2.CreateView(1, 0, RUNTIME_CLASS(CAAView), CSize(10, 10), pContext))
    return FALSE;

    bSplitterWnd = TRUE; // 指示拆分窗口成功 return TRUE;
    //return CFrameWnd::OnCreateClient(lpcs, pContext);
    }void CMainFrame::OnSize(UINT nType, int cx, int cy) // 主框架类的WM_SIZE消息响应函数
    {
    CFrameWnd::OnSize(nType, cx, cy);

    // TODO: Add your message handler code here
    if(bSplitterWnd) // 设置各个窗口的大小
    {
    m_wndSplitter2.SetRowInfo(0, 200, 100);
    m_wndSplitter2.SetRowInfo(1, 200, 100); m_wndSplitter.SetColumnInfo(0, 300, 100);
    m_wndSplitter.SetColumnInfo(1, 300, 100); m_wndSplitter2.RecalcLayout();
    m_wndSplitter.RecalcLayout();
    }
    }
      

  4.   

    SDI中的CSplitterWnd 在CMainFrame类里加个成员变量CSplitterWnd m_MySplitter; 
    OnCreateClient函数里加上: view plaincopy to clipboardprint?
    m_MySplitter.CreateStatic(this,1,2); //1行2列   
    m_MySplitter.CreateView(0,0,RUNTIME_CLASS(CMyTreeView), CSize(250, 150), pContext);    
    m_MySplitter.CreateView(0,1,RUNTIME_CLASS(CMyFormView), CSize(250, 0), pContext);    
    SetActiveView((CView*)m_MySplitter.GetPane(0,0));    
    return 1;// CFrameWndEx::OnCreateClient(lpcs, pContext);不调用基类   
                
    m_MySplitter.CreateStatic(this,1,2); //1行2列
    m_MySplitter.CreateView(0,0,RUNTIME_CLASS(CMyTreeView), CSize(250, 150), pContext); 
    m_MySplitter.CreateView(0,1,RUNTIME_CLASS(CMyFormView), CSize(250, 0), pContext); 
    SetActiveView((CView*)m_MySplitter.GetPane(0,0)); 
    return 1;// CFrameWndEx::OnCreateClient(lpcs, pContext);不调用基类
               如果把2行1列的View再分:
    view plaincopy to clipboardprint?
    m_MySplitter.CreateStatic(this,2,1);    
    m_MySplitter.CreateView(0,0,RUNTIME_CLASS(Ctst1View), CSize(250, 100), pContext);    
    m_MySplitter2.CreateStatic(&m_MySplitter,1,2,WS_CHILD|WS_VISIBLE,m_MySplitter.IdFromRowCol(1, 0));    
    m_MySplitter2.CreateView(0,0,RUNTIME_CLASS(Ctst1View), CSize(250, 100), pContext);    
    m_MySplitter2.CreateView(0,1,RUNTIME_CLASS(Ctst1View), CSize(250, 0), pContext);    
    SetActiveView((CView*)m_MySplitter.GetPane(0,0));    
    return 1;//CFrameWndEx::OnCreateClient(lpcs, pContext);   
      

  5.   

    SDI中的CSplitterWnd 在CMainFrame类里加个成员变量CSplitterWnd m_MySplitter; 
    OnCreateClient函数里加上: view plaincopy to clipboardprint?
    m_MySplitter.CreateStatic(this,1,2); //1行2列   
    m_MySplitter.CreateView(0,0,RUNTIME_CLASS(CMyTreeView), CSize(250, 150), pContext);    
    m_MySplitter.CreateView(0,1,RUNTIME_CLASS(CMyFormView), CSize(250, 0), pContext);    
    SetActiveView((CView*)m_MySplitter.GetPane(0,0));    
    return 1;// CFrameWndEx::OnCreateClient(lpcs, pContext);不调用基类   
                
    m_MySplitter.CreateStatic(this,1,2); //1行2列
    m_MySplitter.CreateView(0,0,RUNTIME_CLASS(CMyTreeView), CSize(250, 150), pContext); 
    m_MySplitter.CreateView(0,1,RUNTIME_CLASS(CMyFormView), CSize(250, 0), pContext); 
    SetActiveView((CView*)m_MySplitter.GetPane(0,0)); 
    return 1;// CFrameWndEx::OnCreateClient(lpcs, pContext);不调用基类
               如果把2行1列的View再分:
    view plaincopy to clipboardprint?
    m_MySplitter.CreateStatic(this,2,1);    
    m_MySplitter.CreateView(0,0,RUNTIME_CLASS(Ctst1View), CSize(250, 100), pContext);    
    m_MySplitter2.CreateStatic(&m_MySplitter,1,2,WS_CHILD|WS_VISIBLE,m_MySplitter.IdFromRowCol(1, 0));    
    m_MySplitter2.CreateView(0,0,RUNTIME_CLASS(Ctst1View), CSize(250, 100), pContext);    
    m_MySplitter2.CreateView(0,1,RUNTIME_CLASS(Ctst1View), CSize(250, 0), pContext);    
    SetActiveView((CView*)m_MySplitter.GetPane(0,0));    
    return 1;//CFrameWndEx::OnCreateClient(lpcs, pContext);