MFC单文档应用程序使用CDockablePane类创建模型树停靠窗口

2 篇文章 0 订阅
1 篇文章 0 订阅

使用CDockablePane类创建模型树停靠窗口


  新建一个带有功能区(Ribbon)的单文档应用程序;在新建过程中,选中图1、2、3中红色箭头所指选项即可。

图1
图2
图3
  接下来介绍实现该功能的各个步骤:
   1. 在“资源视图”中找到“Dialog”,右击选择“插入Dialog(E)”,将“工具箱”中的“Tree Control”拖至创建的Dialog(对话框)上,并将模型树控件与对话框的属性改为图4所示;

在这里插入图片描述

图4

   2. 右击对话框,为对话框添加类CTreeWindow;
   3. 右击模型树控件,为其添加CTreeCtrl类型变量m_cTreeCtrl;
   4. 重写该对话框类的初始化函数OnInitDialog(),在该函数中添加如下代码:
	//往模型树插入节点
	HTREEITEM hTreeItem = m_cTreeCtrl.InsertItem(_T("a tree"));	
	for (int i = 1; i <= 20; i++)
	{
		CString bough;
		bough.Format(_T("a bough%d"), i);
		m_cTreeCtrl.InsertItem(bough, hTreeItem);
	}
	m_cTreeCtrl.Expand(hTreeItem, TVE_EXPAND);//设置模型树节点hTreeItem为展开状态

   5. 右击项目,选择“类向导(Z…)”,创建类CTreeWindowDock,其父类为CDockablePane,如图5所示;

图5

   6. 在CTreeWindowDock.h中添加头文件Treewindow.h与停靠窗口变量CTreeWindow m_TreeBaseWind;
   7. 重写类CTreeWindowDock的WM_CREATE、WM_SIZE、WM_DESTROY消息函数,对应消息处理函数的函数实现如下:

int CTreeWindowDock::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if (CDockablePane::OnCreate(lpCreateStruct) == -1)
		return -1;

	// TODO:  在此添加您专用的创建代码
	//模型树窗口创建
	if (!m_TreeBaseWind.Create(IDD_TREEWINDOW, this))
	{
		TRACE0("未能创建模型树窗口!");
		return -1;
	}
	m_TreeBaseWind.ShowWindow(SW_SHOW);

	return 0;
}


void CTreeWindowDock::OnSize(UINT nType, int cx, int cy)
{
	CDockablePane::OnSize(nType, cx, cy);

	// TODO:  在此处添加消息处理程序代码
	//使窗口随着停靠框架大小变化而变化
	if (m_TreeBaseWind.GetSafeHwnd())
	{
		CRect rect;
		GetClientRect(rect);
		m_TreeBaseWind.MoveWindow(rect);
	}
}


void CTreeWindowDock::OnDestroy()
{
	CDockablePane::OnDestroy();

	// TODO:  在此处添加消息处理程序代码
	//销毁窗口
	m_TreeBaseWind.DestroyWindow();
}

   8. 在MainFrm.h中添加头文件TreeWindowDock.h与变量CTreeWindowDock m_TreeWindDock;并添加函数申明bool CreateDockingWindows();
   9. 在MainFrm.cpp中的OnCreate()函数中添加如下代码:

	//创建停靠窗口
	EnableLoadDockState(FALSE);    //删除停靠窗口的记忆功能
	if (!CreateDockingWindows())
	{
		TRACE0("未能创建输出窗口/n");
		return FALSE;
	}
	m_TreeWindDock.EnableDocking(CBRS_ALIGN_ANY); //使可停靠与浮动  
	DockPane(&m_TreeWindDock);

   10. 在MainFrm.cpp中添加CreateDockingWindows()的函数实现,如下所示:

bool CMainFrame::CreateDockingWindows()
{
	//左侧创建树形控件停靠窗口
	m_TreeWindDock.Create(_T("模型树"), this, CRect(0, 0, 250, 200), TRUE, IDD_TREEWINDOW,
		WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_LEFT | CBRS_FLOAT_MULTI,
		AFX_CBRS_REGULAR_TABS, AFX_CBRS_FLOAT | AFX_CBRS_AUTOHIDE | AFX_CBRS_RESIZE);
	//AFX_CBRS_REGULAR_TABS, AFX_CBRS_FLOAT | AFX_CBRS_AUTOHIDE| AFX_CBRS_RESIZE 的目的是去除关闭按钮

	return true;
}

   若出现图6所示的错误:未定义标识符 “IDD_TREEWINDOW”,只需在Treewindow.h中包含资源头文件Resource.h即可。在这里插入图片描述

图6
   至此,便实现了MFC单文档应用程序使用CDockablePane类创建模型树停靠窗口,效果如图7所示。

在这里插入图片描述

图7
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值