不带doc\view结构的单文档窗口多次分割



如上图,分两步:
1、分割成一行两列的窗口,左边树视图,右边比较特殊,是一个CFrameWnd派生类的框架。窗口分割在主框架的视图类中进行,注意不在主框架的OnCreateClient中分割。
int CChildView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if (CWnd::OnCreate(lpCreateStruct) == -1)
		return -1;

	if(!m_split.CreateStatic(this,1,2)) return FALSE;

	CCreateContext *pContext = (CCreateContext *)lpCreateStruct->lpCreateParams;

	if(!m_split.CreateView(0,0,RUNTIME_CLASS(CLeftView),CSize(500,0),pContext)) 
	{
		m_split.DestroyWindow();
		return 0;
	}

	//第一列设置了大小,第二列默认使用剩下的大小
	if(!m_split.CreateView(0,1,RUNTIME_CLASS(CMyFrameWnd),CSize(0,0),pContext)) 
	{
		m_split.DestroyWindow();
		return 0;
	}

	return 1;
}

void CChildView::OnSize(UINT nType, int cx, int cy)
{
	CWnd::OnSize(nType, cx, cy);

	int width = cx/4;
	m_split.MoveWindow(0, 0, cx, cy);
	m_split.SetColumnInfo(0, width, 0);
	m_split.SetColumnInfo(1, cx-width, 0);
	m_split.RecalcLayout();
}

第二部:将右边的视图再次分割成两行一列的视图。在CFrameWnd的派生类CMyFrameWnd的OnCreateClient函数中进行分割:
BOOL CMyFrameWnd::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
	if(!m_split.CreateStatic(this,2,1)) return FALSE;

	if(!m_split.CreateView(0,0,RUNTIME_CLASS(CRightView),CSize(0,300),pContext)) 
	{
		m_split.DestroyWindow();
		return FALSE;
	}

	//第一行设置了大小,第二行默认使用剩下的大小
	if(!m_split.CreateView(1,0,RUNTIME_CLASS(CBottomView),CSize(0,0),pContext)) 
	{
		m_split.DestroyWindow();
		return FALSE;
	}

	return TRUE;

	//return CFrameWnd::OnCreateClient(lpcs, pContext);
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小米的修行之路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值