在主窗口改变大小时,我想重新分配各个spane的大小,如何做?我试了在CMainFrame::OnSize中
m_wndSplitter.RecalcLayout();
结果不行,请问如何做?谢谢!

解决方案 »

  1.   

    OnSize(...)
    {
           if(m_wndSplitter.GetSafeHwnd())
           {
                 m_wndSplitter.SetColumnInfo(0, 200,0);//SetRowInfo
                 m_wndSplitter.RecalcLayout();
            }
    }
      

  2.   

    我试了,不行呢。你看看,代码如下:
    void CMainFrame::OnSize(UINT nType, int cx, int cy) 
    {
    CFrameWnd::OnSize(nType, cx, cy);

    // TODO: Add your message handler code here
    if(m_wndSplitter.GetSafeHwnd())
    {
    CRect rc;
    GetClientRect(&rc);
    m_wndSplitter.SetColumnInfo(0, rc.Width()/2,0);//SetRowInfo
    m_wndSplitter.RecalcLayout();
    }
    }
    执行就出现执行了非法操作。谢谢了!
      

  3.   

    void CMainFrame::OnSize(UINT nType, int cx, int cy) 
    {
    CFrameWnd::OnSize(nType, cx, cy);   CRect rect;
       GetWindowRect( &rect );
       if( m_bSplitterCreated )  // m_bSplitterCreated set in OnCreateClient
       {
          m_wndSplitter.SetColumnInfo(0, rect.Width()/2, 10);
          m_wndSplitter.SetColumnInfo(1, rect.Width()/2, 10);
          m_wndSplitter.RecalcLayout();
       }
    }你看看!
      

  4.   

    OK,这个是对的,但if(m_wndSplitter.GetSafeHwnd()){}不能判断出Splitter是否创建好了吗?我觉得应该可以呀。但问题是出在哪儿呢?不过你给的这个代码试可以的。非常感谢!给你加分!