MFC 多文档分割视图

刚开始以为在CMainFrame类的里面新建分割视图时一直报错,后来才发现需要在CChildFrame里,在这个地方折腾了一个晚上也没有搞明白,后来看到InitInstance里面的代码才明白,视图是跟CChildFrame关联,不是跟CMainFrame关联,此处做个记录,以后忘了还有的找

CMultiDocTemplate* pDocTemplate;
pDocTemplate = new CMultiDocTemplate(IDR_SmartReadingTYPE,
               RUNTIME_CLASS(CSmartReadingDoc),
               RUNTIME_CLASS(CChildFrame), // 自定义 MDI 子框架
               RUNTIME_CLASS(CSmartReadingView));

BOOL CChildFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
	// TODO: 在此添加专用代码和/或调用基类
	 //创建一个静态分栏窗口,分为1行2列
	if (m_wndSplitter.CreateStatic(this, 1, 2) == NULL)
	{
		return FALSE;
	}
	CRect rect;
	GetClientRect(&rect);
	//将CMedicTreeView连接到0行0列窗格上
	m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CSmartReadingView), CSize(rect.Width()- PROPERTIES_WIDTH, rect.Height()), pContext);
	//将CMedicListView连接到0行1列窗格上
	m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(CBaiduPropertiesView), CSize(PROPERTIES_WIDTH, rect.Height()), pContext);

	return TRUE; //必须返回TRUE,不需要调用基类否则打开的第二个文档布局会显示不完全
	//return CMDIChildWndEx::OnCreateClient(lpcs, pContext);
}


void CChildFrame::OnSize(UINT nType, int cx, int cy)
{
	CMDIChildWndEx::OnSize(nType, cx, cy);

	// TODO: 在此处添加消息处理程序代码
	//这里需要注意窗口大小必须大于0,否则设置分割视图宽度会报错
	if (IsWindowVisible() && cx>30 && cy>30)
	{
		CRect clientRect;
		GetClientRect(&clientRect);

		m_wndSplitter.SetColumnInfo(0, clientRect.Width() - PROPERTIES_WIDTH, 10);
		m_wndSplitter.SetColumnInfo(1, PROPERTIES_WIDTH, 10);
		m_wndSplitter.RecalcLayout();
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值