我在CMainFrame的OnSize中调用
m_Split.SetRowInfo(0,300,300);
会发生错误?在哪里用呢?

解决方案 »

  1.   

    OnSize里要做判断:
    if(m_Split.GetSafeHwnd() && GetDlgItem(m_Split.IdFromRowCol(0, 0)))
    {
    m_Split.SetRowInfo(0,300,300);
    m_Split.RecalcLayout();
    }
      

  2.   

    呵.这个问题问的人还真多啊.
    在MainFrame中的OnSize里处理的话,首先要确认分割窗口及相应的View是否已创建好,再改变大小.也可在每个View的初始化中改变大小,在View的OnSize()中也可以做,并在这里改变View中相应控件的位置.
      

  3.   

    我最近做过这样的程序,如下例子
    void CMainFrame::OnSize(UINT nType, int cx, int cy) 
    {
    CFrameWnd::OnSize(nType, cx, cy);

    // TODO: Add your message handler code here
    CRect rect;
    GetClientRect(&rect);
    if(m_wndSplitter && m_bSize)   ////第一次OnSize的时候,不执行if内部语句。m_bSize初始化为FALSE
    {
    m_wndSplitter.SetRowInfo(0,rect.Height()*2.2/3,0);
    m_wndSplitter.RecalcLayout();
    }
    m_bSize = TRUE;}
    但如果划分的窗口比较复杂,使用了好几个CSplitterWnd,则可如下:
    if(m_wndSplitter && m_wndSplitter2 && m_wndSplitter3)
    {
    m_wndSplitter.SetRowInfo(0,rect.Height()*2.2/3,0);
    m_wndSplitter2.SetColumnInfo(0,rect.Width()/5,0);
    m_wndSplitter3.SetColumnInfo(0,rect.Width()/3,0);
    m_wndSplitter3.SetColumnInfo(1,rect.Width()/3,0);
    m_wndSplitter.RecalcLayout();
    }
    就行了。rect同上例子