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();
}
}