程序员的知识教程库

网站首页 > 教程分享 正文

一文详解MFC树形控件Tree Control

henian88 2024-08-15 21:58:43 教程分享 16 ℃ 0 评论

树形控件

MFC中使用CTreeCtrl类来封装树形控件各种操作,树形控件可以用于树形结构,比如目录树等。其中有一个根节点root,下面有很多子节点。

常用属性配置:

初始化

设置图标并添加根节点和子节点:

m_icon_list.Create(32, 32, ILC_COLOR32, 3, 3);

UINT icons[] = { IDI_ICON_BTC32, IDI_ICON_LTC32, IDI_ICON_XRP32 };

for (int i = 0; i < 3; i++)
	m_icon_list.Add(AfxGetApp()->LoadIconW(icons[i]));

m_tree.SetImageList(&m_icon_list, LVSIL_NORMAL);

HTREEITEM root1 = m_tree.InsertItem(_T("root1"), 0, 0);
HTREEITEM root2 = m_tree.InsertItem(_T("root2"), 1, 1);

HTREEITEM sub1 = m_tree.InsertItem(_T("sub1"), 2, 2, root1);

m_tree.Expand(root1, TVE_EXPAND);

添加节点

void CMyDlg::OnBnClickedBtnAdd()
{
	UpdateData(TRUE);

	if (!m_string.GetLength()) {
		AfxMessageBox(_T("请输入文本"));
		return;
	}

	HTREEITEM item = m_tree.GetSelectedItem();

	if (!item) item = TVI_ROOT;

	TVINSERTSTRUCT ts = { 0 };
	ts.hParent = item;
	ts.hInsertAfter = TVI_LAST;
	ts.item.pszText = m_string.GetBuffer();
	ts.item.mask = TVIF_TEXT | TVIF_IMAGE;
	HTREEITEM new_item = m_tree.InsertItem(&ts);
	m_tree.SelectItem(new_item);
	m_tree.EnsureVisible(new_item);

	m_string = _T("");
	UpdateData(FALSE);
}

删除节点

void CMyDlg::OnBnClickedBtnDel()
{
	HTREEITEM item = m_tree.GetSelectedItem();

	if (!item) {
		AfxMessageBox(_T("请选择一个节点"));
		return;
	}

	HTREEITEM parent = m_tree.GetParentItem(item);
	m_tree.DeleteItem(item);
	m_tree.SelectItem(parent);
}

修改节点

void CMyDlg::OnBnClickedBtnModify()
{
	UpdateData(TRUE);

	HTREEITEM item = m_tree.GetSelectedItem();

	if (!item) {
		AfxMessageBox(_T("请选择一个节点"));
		return;
	}

	if (!m_string.GetLength()) {
		AfxMessageBox(_T("请输入文本"));
		return;
	}

	m_tree.SetItemText(item, m_string);
}

添加事件

选择节点,编辑框显示节点中的内容:

void CMyDlg::OnTvnSelchangedTree(NMHDR* pNMHDR, LRESULT* pResult)
{
	LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR);
	
	UpdateData(TRUE);

	HTREEITEM item = m_tree.GetSelectedItem();

	if (!item) {
		AfxMessageBox(_T("请选择一个节点"));
		return;
	}

	m_string = m_tree.GetItemText(item);

	UpdateData(FALSE);

	*pResult = 0;
}

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表