1、创建一个单文档结构,我用VS2010做示例:
2、现在要实现的目标是,将客户区分割成左右两块,再将右面那块分割为上下两块。
3、先实现左右分割:
(1)添加两个MFC类,CLeftView和CRightFrame;
(2)其中CLeftView派生于CView,CRightFrame派生于CFrameWnd;
(3)在CMainFrame中定义一个CSplitterWnd的对象:CSplitterWnd m_splitWnd;
(4)重写CMainFrame的虚函数OnCreateClient,在其中添加以下代码:
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
// TODO: 在此添加专用代码和/或调用基类
//
BOOL bFlag = m_splitWnd.CreateStatic(this, 1, 2);
if (bFlag)
{
CSize sz(120, 600);
m_splitWnd.CreateView(0, 0, RUNTIME_CLASS(CLeftView), sz, pContext);
m_splitWnd.CreateView(0, 1, RUNTIME_CLASS(CRightFrame), sz, pContext);
}
return TRUE;
//return CFrameWndEx::OnCreateClient(lpcs, pContext);
}
(5)别忘了包含头文件:
#include "LeftView.h"
#include "RightFrame.h"
(6)OK,现在就将客户区分为左右两块了,效果如下:
(7)类视图如下:
4、接着,实现对右侧区域的上下分割:
(1)同理,定义两个类,并在CRightFrame中包含这两个类的头文件:
#include "TopScroView.h"
#include "BottomView.h"
(2)重写CRightFrame类的OnCreateClient虚函数:
BOOL CRightFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
// TODO: 在此添加专用代码和/或调用基类
//
BOOL bFlag = m_splitWnd.CreateStatic(this, 2, 1);
if (bFlag)
{
CSize sz(120, 400);
m_splitWnd.CreateView(0, 0, RUNTIME_CLASS(CTopScroView), sz, pContext);
m_splitWnd.CreateView(1, 0, RUNTIME_CLASS(CBottomView), sz, pContext);
}
return TRUE;
//return CFrameWnd::OnCreateClient(lpcs, pContext);
}
(3)实现效果如下:
5、主要是利用CSplitterWnd类,想了解更多可以查看MSDN。