首先建立MFCAppWizard(exe),取名字为SplitterWnd,下一步,选择单文档“Single document”,其他默认,点击“完成”。
点击ResourceView,在Dialog下插入一个Dialog窗口用于稍后的分割后的窗口,ID号分别改为“IDD_FORMVIEW1”,属性style=child。记得及时保存。
添加两个类如图
选择基类
作为左窗口
右上视图用于显示文本,故其基类选CEditView,类名为CLeftTopView;另一个MFC类的基类选CFormView类,取类名为CLeftBttmView,该类即对应右下视图(由于该类基于CFormView类,需要有对话框与之对应,故应先在资源中新建对话框,对话框中的控件如图1 style必须为child)。
完成类的添加后,进行代码编写,首先在CMainFrame类声明中添加CSplitterWnd对象的声明:
CSplitterWndm_wndSplitter;// split the view into left and right
CSplitterWnd m_wndSplitterRight; //split theright view into top and bottom
然后重载CMainFrame类的函数OnCreateClient,添加如下代码,即可实现窗口的分割:
BOOLCMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
CRectrect; GetClientRect(rect);
//TODO: 在此添加专用代码和/或调用基类
//先把窗口分割为1>2的形式,即分割为两列
/*m_wndSplitter.CreateStatic(this,2, 1 , WS_CHILD | WS_VISIBLE| WS_BORDER);
//然后把窗口第2列再分割为 2>1的形式
//m_wndSplitterRight.CreateStatic(&m_wndSplitter, 2, 1,WS_CHILD|WS_VISIBLE,m_wndSplitter.IdFromRowCol(0, 1) );
//下面为分割后的窗口对应的视图类
m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CLiftView),
CSize(rect.Width()/2,rect.Height()), pContext);
m_wndSplitterRight.CreateView(1,1,RUNTIME_CLASS(CRightDownView),
CSize(rect.Width()/2,rect.Height()/2),pContext);
m_wndSplitterRight.CreateView(1,0,RUNTIME_CLASS(CRightUpView),
CSize(rect.Width()/2,rect.Height()/2), pContext);
returntrue;*/
//先把窗口分割为1>2的形式,即分割为两列
m_wndSplitter.CreateStatic(this,1, 2 , WS_CHILD | WS_VISIBLE| WS_BORDER);
//然后把窗口第2列再分割为 2>1的形式
m_wndSplitterRight.CreateStatic(&m_wndSplitter,2, 1, WS_CHILD|WS_VISIBLE,m_wndSplitter.IdFromRowCol(0, 1) );
//下面为分割后的窗口对应的视图类
m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CLiftView),
CSize(rect.Width()/4,rect.Height()), pContext);
m_wndSplitterRight.CreateView(0,0,RUNTIME_CLASS(CRightUpView),
CSize(rect.Width()/4*3,rect.Height()/4*3),pContext);
m_wndSplitterRight.CreateView(1,0,RUNTIME_CLASS(CRightDownView),
CSize(rect.Width()/4*3,rect.Height()/4),pContext);
returntrue;
returnCFrameWndEx::OnCreateClient(lpcs, pContext);
}