单文本程序分割符二次分割

基于上一篇基础之上:https://blog.csdn.net/shuaiLS/article/details/86078825

上一篇说明了简单分割窗体的过程,此次将说明二次分割过程

1.再创建一个Dialog,同样的将Styles设置成Child,None

单文本程序分割符二次分割

2.添加对应的类CTestDialog01,具体请查看上一篇(注意基类选择FormView)

3.在MainFrm.cpp添加CTestDialog01类的头文件

#include "TestDialog01.h"

4.在MainFrm.h中添加第二个分割类的对象

CSplitterWnd	m_Splitter_Ex;

5.修改OnCreateClient代码如下:

BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) 
{
	if (!m_Splitter.CreateStatic(this, 1, 2))	//分割为1行2列
		return false;

	m_Splitter.CreateView(0, 1, RUNTIME_CLASS(CTestDialog), CSize(0,0), pContext);
	
	if (!m_Splitter_Ex.CreateStatic(&m_Splitter, 2, 1, WS_VISIBLE|WS_CHILD, m_Splitter.IdFromRowCol(0,0)))//分割为2行1列
		return false;

	m_Splitter_Ex.CreateView(0, 0, RUNTIME_CLASS(CMySingleTestView), CSize(0,0), pContext);
	
	m_Splitter_Ex.CreateView(1, 0, RUNTIME_CLASS(CTestDialog01), CSize(0,0), pContext);

	return true;
}

6.运行效果如下:

单文本程序分割符二次分割

7.此时会发现界面中各窗体大小并不是我们想要的效果,此时需要设置分割区的大小,设置横向和纵向占窗体4/5

BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) 
{
	CRect rect;
	GetClientRect(&rect);
	int iwidth = rect.right;
	int iheight = rect.bottom;

	if (!m_Splitter.CreateStatic(this, 1, 2))	//分割为1行2列
		return false;

	m_Splitter.CreateView(0, 1, RUNTIME_CLASS(CTestDialog), CSize(0,0), pContext);
	m_Splitter.SetColumnInfo(0,iwidth/5*4,0);

	if (!m_Splitter_Ex.CreateStatic(&m_Splitter, 2, 1, WS_VISIBLE|WS_CHILD, m_Splitter.IdFromRowCol(0,0)))//分割为2行1列
		return false;

	m_Splitter_Ex.CreateView(0, 0, RUNTIME_CLASS(CMySingleTestView), CSize(0,0), pContext);
	m_Splitter_Ex.SetRowInfo(0,iheight/5*4,0);

	m_Splitter_Ex.CreateView(1, 0, RUNTIME_CLASS(CTestDialog01), CSize(0,0), pContext);

	return true;
}

8.运行效果如下:

单文本程序分割符二次分割