我已经将视图成功分割,但是分割线我想让它按框架大小相对移动。
比如我将视图按1:1的比例左右分割,
m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(COneView),CSize(rect.Width()/2,rect.Height()),pContext);
m_wndSplitter.CreateView(0,1,RUNTIME_CLASS(COneView),CSize(rect.Width()/2,rect.Height()),pContext);
但是我在改变框架大小的时候,左边的视图宽度不变,而右边的视图宽度改变了。
我的问题就是如何将分割线框架大小相对移动,在本例中就是在1:1左右分割的时候,让分割线永远居中。

解决方案 »

  1.   

    我的问题就是如何将分割线框架大小相对移动,在本例中就是在1:1左右分割的时候,让分割线永远居中。
    ===================
    处理左右视图的WM_SIZE消息,在里面相应的改变它们的大小就行了。
      

  2.   

    处理窗体的WM_SIZE消息就行了,在窗体改变大小时,根据窗体的大小来分割。
      

  3.   

    简单,在CMainFrame主框架类中添加WM_SIZE消息,调用CSplitterWnd::SetColumnInfo();来设置各个View的区域,然后调用CSplitterWnd::RecalcLayout();刷新一下即可
      

  4.   

    楼上的,我添加了消息后,写入代码如下
    CRect rect;
    GetClientRect( &rect );
    m_wndSplitter.SetColumnInfo(0, rect.Width()/2, 10);
    m_wndSplitter.SetColumnInfo(1, rect.Width()/2, 10);
    m_wndSplitter.RecalcLayout();有中断错误
    void CSplitterWnd::SetColumnInfo(int col, int cxIdeal, int cxMin)
    {
    ASSERT_VALID(this);
    ASSERT(col >= 0 && col < m_nMaxCols);
    ASSERT(cxIdeal >= 0);
    ASSERT(cxMin >= 0); m_pColInfo[col].nIdealSize = cxIdeal;
    m_pColInfo[col].nMinSize = cxMin;
    }错误是m_pColInfo没有分配到空间,怎么回事呢?
      

  5.   

    囧,因为在OnSize中m_wndSplitter还没有创建窗口,
    在CMainFrame主框架类定义一个BOOL bOK= FALSE;的成员变量,初始值为FALSE;表示CSplitterWnd是否创建成功,在OnCreateClient中,待m_wndSplitter.CreateStatic(..);CreateView()调用完成以后,将该BOOL bOk置为TRUE;
    然后再OnSize函数中,先判断bOK是否为TRUE,如果是的话,就加上你上面的代码
      

  6.   

    下面的操作都是在CMainFrame主框架类中类似这样
    BOOL bOK;初始化函数中
    bOK = FALSE;OnCreateClient函数中
    {
     m_splitter.CreateStatic(...);
     m_splitter.CreateView(...);
     ...
     bOk = TRUE;
     return TRUE;
    }OnSize函数中
    {
     ....
     ...
     if(bOK)
     {
       // 加上你上面的代码
     }
    }