1、创建一个单文档结构,我用VS2010做示例:

分割单文档视图结构_头文件

分割单文档视图结构_#include_02


2、现在要实现的目标是,将客户区分割成左右两块,再将右面那块分割为上下两块。


3、先实现左右分割:

(1)添加两个MFC类,CLeftView和CRightFrame;

(2)其中CLeftView派生于CView,CRightFrame派生于CFrameWnd;

分割单文档视图结构_CL_03

分割单文档视图结构_CL_04

(3)在CMainFrame中定义一个CSplitterWnd的对象:CSplitterWnd m_splitWnd;

(4)重写CMainFrame的虚函数OnCreateClient,在其中添加以下代码:

分割单文档视图结构_#include_05

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,现在就将客户区分为左右两块了,效果如下:

分割单文档视图结构_头文件_06

(7)类视图如下:

分割单文档视图结构_#include_07


4、接着,实现对右侧区域的上下分割:

(1)同理,定义两个类,并在CRightFrame中包含这两个类的头文件:


#include "TopScroView.h"
#include "BottomView.h"


分割单文档视图结构_#include_08



分割单文档视图结构_#include_09


(2)重写CRightFrame类的OnCreateClient虚函数:

分割单文档视图结构_单文档分割_10


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)实现效果如下:

分割单文档视图结构_头文件_11


5、主要是利用CSplitterWnd类,想了解更多可以查看MSDN。