有关CSplitterWnd的几个函数能不能详细解释一下呢Create
CreateStatic
CreateView不要贴MSDN上的函数说明,我想听你们自己的理解我的疑问是:
我用    .creat(This,2,2,CSize(10, 10),pContext)能创建出横竖两条交叉的split,拉出来能把视图分成4块,但是初始化后它们默认都在最边上,我想让他们在正中间显示,不知道怎么处理我知道CreateStatic和CreateView可以让split在某个位置显示,但是不知道怎么用CreateStatic函数创建横竖两条split,头疼啊想要的效果是这样的:
-------------------------------
|              |              |
|              |              |
|              |              | 
|--------------|--------------|
|              |              |
|       |       |
|              |              |
-------------------------------

解决方案 »

  1.   

    设置宽度
    m_wndSplitter.SetColumnInfo(0,第1列宽度,0);
    m_wndSplitter.SetColumnInfo(1,第2列宽度,0);设置高度
    m_wndSplitter.SetRowInfo(0,第1列高度,0);
    m_wndSplitter.SetRowInfo(1,第2列高度,0);
      

  2.   

    要定位大小和位置可以使用SetColInfo()和SetRowInfo()来完成
      

  3.   

    不知道怎么用CreateStatic函数创建横竖两条split:
    ——————————————————————————————
    使用三个CSplitterWnd首先Create一个竖着的有两列的CSplitterWnd  SpliVert然后再在SpliVert的两列中分别CreateStatic两个横着的有两行的 CSplitterWnd SpliHorz1、SpliHorz2然后SpliHorz1、SpliHorz2分别在各自自己的两行中创建4个View当然先创建横着的再创建两个竖着的亦可
      

  4.   

    置宽度
    m_wndSplitter.SetColumnInfo(0,第1列宽度,0);
    m_wndSplitter.SetColumnInfo(1,第2列宽度,0);设置高度
    m_wndSplitter.SetRowInfo(0,第1列高度,0);
    m_wndSplitter.SetRowInfo(1,第2列高度,0);还要再具体点,我试过了,不行,而且一拖动就出错
      

  5.   

    不知道怎么用CreateStatic函数创建横竖两条split:
    ——————————————————————————————
    使用三个CSplitterWnd首先Create一个竖着的有两列的CSplitterWnd  SpliVert然后再在SpliVert的两列中分别CreateStatic两个横着的有两行的 CSplitterWnd SpliHorz1、SpliHorz2然后SpliHorz1、SpliHorz2分别在各自自己的两行中创建4个View当然先创建横着的再创建两个竖着的亦可
    ____________________________________________________________________________________
    这样不行,比如先竖再两横,那么横着的一条移动后就不再和另一边的在同一水平线了
      

  6.   

    肯定要这样建立的,CSplitterWnd 本身是个Wnd,不是Bar,怎么可以穿越呢?
    如果LZ想达到穿越类似穿越效果的话,可以派生自己的CSplitterWnd,处理其拖动操作,当其中一个横着plitterWnd的拖动后,就SetColumnInfo让另一个横着的plitterWnd自己跟它对齐
      

  7.   

    看了dazedase(什么也不懂,什么也不会,所以我很菜)(▲▲▲▲▲)(★★) 的受益匪浅。顺便问一句,如果先竖分,再对右侧横分,然后再分别对右侧横分后的两个区分竖分,这样可以实现同拉联动的效果吗?
      

  8.   

    if(FALSE==m_wndSplitter.Create(this,2, 2,CSize(10, 10),pContext) 
     return FALSE;
    CRect rect;
    GetClientRect(&rect);

    m_wndSplitter.SetColumnInfo(0,rect.Width()/2,0);
    m_wndSplitter.SetColumnInfo(1,rect.Width()/2,0); m_wndSplitter.SetRowInfo(0,rect.Height()/2,0);
    m_wndSplitter.SetRowInfo(1,rect.Height()/2,0); return TRUE;运行出错,错在哪呢???
      

  9.   

    在CSplitterWnd里面创建的子CSplitterWnd不可能超出父CSplitterWnd的势力范围,所以交叉穿越不可能实现
    LS的方法只会得到下面的结果-------------------------------
    |              |       |      |
    |              |       |      |
    |              |       |      | 
    |              |--------------|
    |              |       |      |
    |       |       |   |
    |              |       |      |
    -------------------------------
      

  10.   

    Wait ...  我发现自己好像搞错了 -_-!研究一下先。
    如有误导,实在抱歉!
    偶实在太菜了
      

  11.   

    完了,悔了 -_-!我之前全讲错了!!!!!!!!!!!!!!!!CSplitterWnd可以实现穿越!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    使用一个CSplitterWnd即可!!!!!!!!!if(!m_wndSplitter.CreateStatic(this,2,2,WS_CHILD|WS_VISIBLE|WS_BORDER)) return FALSE;m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CView1),CSize(0,0),pContext);
    m_wndSplitter.CreateView(0,1,RUNTIME_CLASS(CView2),CSize(0,0),pContext);
    m_wndSplitter.CreateView(1,0,RUNTIME_CLASS(CView3),CSize(0,0),pContext);
    m_wndSplitter.CreateView(1,1,RUNTIME_CLASS(CView4),CSize(0,0),pContext);
      

  12.   

    果然搞出来了,但是吃的不透,呵呵,真的希望能和你即时联系,QQ,MSN都行
    呵呵
    RUNTIME_CLASS(CView1)
    pContext->m_pNewViewClass
    有什么区别呢
      

  13.   

    刚做了一个测试,完整代码如下
    BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) 
    {
    // TODO: Add your specialized code here and/or call the base class if(!m_wndSplitter.CreateStatic(this,2,2,WS_CHILD|WS_VISIBLE|WS_BORDER)) return FALSE; m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CView1),CSize(0,0),pContext);
    m_wndSplitter.CreateView(0,1,RUNTIME_CLASS(CView2),CSize(0,0),pContext);
    m_wndSplitter.CreateView(1,0,RUNTIME_CLASS(CView3),CSize(0,0),pContext);
    m_wndSplitter.CreateView(1,1,RUNTIME_CLASS(CView4),CSize(0,0),pContext); CRect rc;
    GetClientRect(rc);
    m_wndSplitter.SetColumnInfo(0,rc.Width()/2,0);
    m_wndSplitter.SetColumnInfo(1,rc.Width()/2,0);
    m_wndSplitter.SetRowInfo(0,rc.Height()/2,0);
    m_wndSplitter.SetRowInfo(1,rc.Height()/2,0); return TRUE;
    }在这里我为我之前的瞎扯误导抱歉! :(
    现在我发现自己不是一般的菜! 汗!
      

  14.   

    CreatView的第三个参数
    RUNTIME_CLASS(CView1)
    pContext->m_pNewViewClass
    有什么区别呢
      

  15.   

    这个我也不太清楚啊
    pContext->m_pNewViewClass应该只能表示SDI最开始的那个默认的View
    现在要切分,所以就用RUNTIME_CLASS(CView1)了
      

  16.   

    有点问题,来我们一起讨论下
    我是这么实现的,和你不一样
    if(!m_wndSplitter.CreateStatic(this,2,2,WS_CHILD|WS_VISIBLE|WS_BORDER)) return FALSE;
    CRect rect;
    GetClientRect(&rect);
    m_wndSplitter.CreateView(0,0,pContext->m_pNewViewClass,CSize(rect.Width()/2,rect.Height()/2),pContext);
    m_wndSplitter.CreateView(0,1,pContext->m_pNewViewClass,CSize(rect.Width()/2,rect.Height()/2),pContext);
    m_wndSplitter.CreateView(1,0,pContext->m_pNewViewClass,CSize(rect.Width()/2,rect.Height()/2),pContext);
    m_wndSplitter.CreateView(1,1,pContext->m_pNewViewClass,CSize(rect.Width()/2,rect.Height()/2),pContext);
    return TRUE;我用的就是pContext->m_pNewViewClass啊
      

  17.   

    你可以试试看在每个View的OnDraw里TextOut出不同的文字以示区别
    比如View1 就 pDC->TextOut(10,10,"View1");
    View2 就 pDC->TextOut(10,10,"View2");如果你使用pContext->m_pNewViewClass,那么每个切分窗口中的View实际上是同一个View类的实例,也就是这四个View是从一个模子倒出来的,你会发现四个View上的文字都是一样的显然你切分窗口的目的不是搞画中画,每个View的的类应该不同(当然如果每个View中所做的事情都一样,用同一个View类创建四个实例是减轻代码量的好办法,但是需要让实例们可以区分)pContext->m_pNewViewClass只能表示SDI最开始的那个默认的View类,只有一个
    RUNTIME_CLASS(CViewxxx)可以表示任何一个存在的View类,有N个
    比如你可以在左上角放一个EditView,右上角放一个ScrollView,左下角放一个FormView,右下角放一个TreeView,RUNTIME_CLASS可以,而pContext->m_pNewViewClass好像做不到这一点