MFC控件用法(十五、树形控件(Tree Control))

十五、树形控件(Tree Control)

作用:

树形型控件是将一组信息以树状图的形式体现,数据显示的更有层次。

消息映射函数:

  • NM_CLICK : 指示用户在控件中单击鼠标
  • NM_DBLICK : 指示用户在控件中双击了一下鼠标
  • NM_RCLICK : 用户已在控件内单击了鼠标右键
  • TVN_SELCHANGING : 指示选定项即将从一项变为另一项
  • TVN_SELCHANGED :指示选定项已经从一项变为另一项
  • TVN_ITEMCHANGED :通知TreeView控件的父窗口的特性已经更改

控件属性:

·

  • TVS_HASLINES tree view控件的子项与它们的父项之间用线连接。
  • TVS_LINESATROOT tree view控件用线连接子项和根项。
  • TVS_HASBUTTONS tree view在每一个父项的左边添加一个按钮。
  • TVS_EDITLABELS tree view控件允许用户编辑tree view项的标签。
  • TVS_SHOWSELALWAYS 当tree view失去焦点时,使被选择的项仍然保持被选择。
  • TVS_DISABLEDRAGDROP 该tree view控件被禁止发送。
  • TVN_BEGINDRAG 通知消息。
  • TVS_NOTOOLTIPS tree view控件使用工具提示。
  • TVS_SINGLEEXPAND 当使用这个风格时,改变在tree
    view中的选择将导致正被选择的项展开,而没有被选择的项收缩。如果用鼠标单击被选择的项,并且该项是关闭的,则该项就会展开。如果该被选择的项被单击时是打开的,则它就会收缩。

使用方法:以添加和删除树节点为例

1、创建树形控件的控件型变量或者使用GetDlgItem()函数获取控件句柄。

CTreeCtrl m_tree;

2、在添加按钮中使用HTREEITEM hNew = m_tree.InsertItem(&vi),添加树结构的支点,参数为树形结构体(包括父节点,节点名称等信息),返回值为此节点的句柄。

void C树形控件Dlg::OnBnClickedAdd()
{
	// TODO:  在此添加控件通知处理程序代码
	CString str;
	m_edit.GetWindowText(str);
	if (str.GetLength() == 0)
	{
		AfxMessageBox(_T("添加的值不能为空"));
		return;
	}
	HTREEITEM hTree = m_tree.GetSelectedItem(); //获取当前选中的树节点句柄
	if (hTree == NULL)
	{
		hTree = TVI_ROOT;
	}
	TVINSERTSTRUCT vi = { 0 };//树形控件的结构体
	vi.hParent = hTree;//此项为此项的父节点句柄,如果是TVI_ROOT或者为NULL时,则此项为根节点
	vi.hInsertAfter = TVI_LAST; //插入此项额句柄值	意味TVI_FIRST	在列表的开始插入项	TVI_LAST	在列表的最后插入项
								//TVI_ROOT	作为一个根项添加
							//	TVI_SORT	以字母顺序插入项
	vi.item.pszText = str.GetBuffer();
	vi.item.mask = TVIF_TEXT;
	HTREEITEM hNew = m_tree.InsertItem(&vi);
	m_tree.SelectItem(hNew);
	m_tree.EnsureVisible(hNew);
}

3、使用m_tree.DeleteItem(htree);函数删除树节点,参数为选中的支点句柄。

void C树形控件Dlg::OnBnClickedDel()
{
	// TODO:  在此添加控件通知处理程序代码
	HTREEITEM htree = m_tree.GetSelectedItem();
	if (htree == NULL )
	{
		AfxMessageBox(_T("请选择一个节点"));
		return;
	}
	HTREEITEM hptree = m_tree.GetParentItem(htree);
	m_tree.DeleteItem(htree); //删除选中的节点
	m_tree.SelectItem(hptree);//将光标移到删除节点的父节点

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值