CSplitterWnd分成上下2个窗体后,想让下面窗体随着主窗口onsize时,高度不变(类似DialogBar在下面的效果)但在onsize里
m_ViewSplitter.SetRowInfo( 1, m_Height, 0 );这个m_Height不知道在那里取得,在onsize里取得是无变化的,在onsize之前才可以请问,如何解决,谢谢大家

解决方案 »

  1.   

    调用过SetRowInfo之后,还得recalayout
      

  2.   

    主框架类的WM_SIZE消息的响应函数OnSize中
    调用CSplitterWnd::SetRowInfo();CSplitterWnd::RecalcLayout();
      

  3.   

    CMainFrame::OnCreateClient 中做切分窗口的初始化处理;并记录m_height
      

  4.   

    to VisualEleven:
    再改变主窗口大小时,下面视图高度不变(类似DialogBar在下面的效果)
    但允许用户托动分隔条,就是能记住这个高度
      

  5.   


    BOOL m_bSplitterWnd = FALSE; // CMainFrame类的成员变量,标记,初始值为FALSE
    CSplitterWnd m_wndSplitter;  //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, 1))
    {
    return FALSE;
    } if(!m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CXXView), CSize(100, 100), pContext))
    {
    return FALSE;
    } if(!m_wndSplitter.CreateView(1, 0, RUNTIME_CLASS(CXXView2), CSize(0, HEIGHT_WND), pContext))
    {
    return FALSE;
    } m_bSplitterWnd = TRUE; return TRUE;
    //return CFrameWnd::OnCreateClient(lpcs, pContext);
    }void CMainFrame::OnSize(UINT nType, int cx, int cy) 
    {
    CFrameWnd::OnSize(nType, cx, cy);

    // TODO: Add your message handler code here
    if(m_bSplitterWnd && m_wndSplitter.GetSafeHwnd())
    {
    #define HEIGHT_WND 300
    CRect rc;
    GetClientRect(rc);
    m_wndSplitter.SetRowInfo(0, cy - HEIGHT_WND, 10);
    m_wndSplitter.SetRowInfo(1, HEIGHT_WND, 10);
    m_wndSplitter.RecalcLayout();
    }
    }当然这里是限定死了下面视图的高度为HEIGHT_WND,而你需要的是允许用户托动分隔条,就是能记住这个高度,那你可能需要重写CSplitterWnd,处理WM_LBUTTONDOWN,WM_LBUTTONUP, WM_MOUSEMOVE消息,通过GetPane()->GetGetWindowRect()得到下面区域大高度,然后传递到主框架窗口中。