添加项:
//获取编辑框中的文本
CString strText;
GetDlgItemText(IDC_EDIT, strText);
//获取选中的项,返回一个树形控件句柄
HTREEITEM hTree = m_tree.GetSelectedItem();
if (hTree == nullptr)
hTree = TVI_ROOT;//如果当前没有选中某一项,就把这个句柄设为根
//插入树的结构
TVINSERTSTRUCT ts = { 0 };
ts.hParent = hTree;//要插入的那一项是hTree的子项
ts.hInsertAfter = TVI_LAST;//插入根的后面
ts.item.pszText = strText.GetBuffer();//要插入的文本
ts.item.mask = TVIF_TEXT;//插入的是文本
HTREEITEM hNewItem = m_tree.InsertItem(&ts);
m_tree.SelectItem(hNewItem);//选中新插入的项
m_tree.EnsureVisible(hNewItem);//确保可见,防止文本过长
删除项:
//获取选中项然后删除
HTREEITEM hTree = m_tree.GetSelectedItem();
if (hTree == nullptr)
{
AfxMessageBox(_T("没有选中节点"));
return;
}
//删除后选中它的父节点,否则默认选中它的兄弟节点(如果有的话)
HTREEITEM hParent = m_tree.GetParentItem(hTree);
m_tree.DeleteItem(hTree);
m_tree.SelectItem(hParent);
修改项:
//获取选中项
HTREEITEM hTree = m_tree.GetSelectedItem();
if (hTree == nullptr)
{
AfxMessageBox(_T("没有选中节点"));
return;
}
//获取修改后的文本
CString strText;
GetDlgItemText(IDC_EDIT, strText);
if (strText.GetLength() == 0)
{
AfxMessageBox(_T("请输入文本"));
return;
}
//修改文本
m_tree.SetItemText(hTree, strText);
当选中某一项的时候使其文本显示在文本框中,在树形控件中的事件消息中选择TVN_SELCHANGED
void CMFCTESTDlg::OnTvnSelchangedTree(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR);
// TODO: 在此添加控件通知处理程序代码
*pResult = 0;
//获取选中项
HTREEITEM hTree = m_tree.GetSelectedItem();
if (hTree == nullptr)
{
return;
}
//获取选中项的文本并显示在文本框中
CString strText = m_tree.GetItemText(hTree);
SetDlgItemText(IDC_EDIT, strText);
}