開發環境:vs2010
在對框架窗口進行分割之后需要根據需求設置每個分割窗口的大小,但是在通過createView(...)設置大小時,往往起不到想要的結果,如下代碼並不能將框架的窗口按照預設的大小來進行分割:

1 BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) 2 { 3 // TODO: 在此添加專用代碼和/或調用基類 4 //return CFrameWndEx::OnCreateClient(lpcs, pContext); 5 isSplitter = splitterWnd(pContext); 6 return isSplitter; 7 } 8 9 bool CMainFrame::splitterWnd(CCreateContext* pContext) 10 { 11 if(!m_mainSplitter.CreateStatic(this,1,3)) 12 return false; 13 if(!m_leftSplitter.CreateStatic(&m_mainSplitter,2,1,WS_CHILD | WS_VISIBLE,m_mainSplitter.IdFromRowCol(0,0))) 14 return false; 15 16 m_leftSplitter.CreateView(0,0,RUNTIME_CLASS(CInputImage),CSize(10,1),pContext); 17 m_leftSplitter.CreateView(1,0,RUNTIME_CLASS(CCalculateItem),CSize(10,1),pContext); 18 m_mainSplitter.CreateView(0,1,RUNTIME_CLASS(COriginImage),CSize(1,1),pContext); 19 m_mainSplitter.CreateView(0,2,RUNTIME_CLASS(CCalculateResult),CSize(1,1),pContext); 20 21 return true; 22 }
這時候,需要在設置了在CreateView后,使用m_wndSplitter.SetRowInfo(....)設置水平分割條的位置,通常可以onSize()函數中進行設置,以達到分割窗口能夠根據父窗口的大小自動調整,代碼如下:

1 void CMainFrame::OnSize(UINT nType, int cx, int cy) 2 { 3 CFrameWndEx::OnSize(nType, cx, cy); 4 5 // TODO: 在此處添加消息處理程序代碼 6 CRect clientRect; 7 GetClientRect(&clientRect); 8 9 if(isSplitter) 10 { 11 m_mainSplitter.SetColumnInfo(0,clientRect.Width() * 0.15,10); 12 m_mainSplitter.SetColumnInfo(1,clientRect.Width() * 0.7,10); 13 m_leftSplitter.SetRowInfo(0,clientRect.Height() * 0.15,10); 14 m_mainSplitter.RecalcLayout(); 15 m_leftSplitter.RecalcLayout(); 16 } 17 }
參考網帖:http://bbs.csdn.net/topics/390478203?page=1