1.MainFrame.h
protected:
CSplitterWnd m_wndSplitterTotal; //用於總體切割
CSplitterWnd m_wndSplitterRight; //用於右側切割
BOOL m_bSplitterCreated; // 是否已經分割窗口
2. MainFrame.cpp:
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT /*lpcs*/,
CCreateContext* pContext)
{
// 創建一個靜態分欄窗口,分爲一行兩列
if ( m_wndSplitterTotal.CreateStatic(this, 1, 2) == NULL )
{
return FALSE;
}
// 將CLandOwnerView類連接到總分欄對象的0行0列
m_wndSplitterTotal.CreateView(0, 0, RUNTIME_CLASS(CLandOwnerView),
CSize(700, 700), pContext);
if ( m_wndSplitterRight.CreateStatic(&m_wndSplitterTotal, 2, 1, WS_CHILD | WS_VISIBLE,
m_wndSplitterTotal.IdFromRowCol(0, 1) ) == NULL )
{
return FALSE;
}
// 將CRightUpView類連接到右邊分欄對象的0行0列
m_wndSplitterRight.CreateView(0, 0, RUNTIME_CLASS(CRightUpView),
CSize(100, 200), pContext);
// 將CRightDownView類連接到右邊分欄對象的1行0列
m_wndSplitterRight.CreateView(1, 0, RUNTIME_CLASS(CRightDownView),
CSize(100, 200), pContext);
// 設置窗格的初始化的大小
m_wndSplitterTotal.SetRowInfo(0, 100, 0);
m_wndSplitterTotal.SetActivePane(0, 0, NULL);
m_bSplitterCreated = TRUE;
return TRUE;
}
當窗口改變大小的時候,分割窗口也會去改變大小
void CMainFrame::OnSize(UINT nType, int cx, int cy)
{
CFrameWnd::OnSize(nType, cx, cy);
// TODO: Add your message handler code here
CRect rect;
GetWindowRect(&rect);
// 如果窗口被分割,而且程序沒有最小化
if ( m_bSplitterCreated && nType != SIZE_MINIMIZED )
{
m_wndSplitterTotal.SetColumnInfo(0, rect.Width() - 250, 10);
m_wndSplitterTotal.SetColumnInfo(1, 250, 10);
m_wndSplitterTotal.RecalcLayout();
m_wndSplitterRight.SetRowInfo(0, rect.Height() / 2, 10);
m_wndSplitterRight.SetRowInfo(0, rect.Height() / 2, 10);
m_wndSplitterRight.RecalcLayout();
}
}