MFC树形控件基本操作

在MFC中,会用到树形控件,这里做下记录。

增加节点

①增加根节点

1 HTREEITEM hRoot;
2 CString str = "Root"
3 hRoot = m_treeCtrl.InsertItem(str,TVI_LAST);

②插入孩子节点

1 //添加节点位于hRoot所有孩子节点末尾
2 HTREEITEM hChild = m_treeCtrl.InsertItem(str,hRoot);
3 //或者
4 HTREEITEM hChild = m_treeCtrl.InsertItem(str,hRoot,TVI_LAST);

删除节点

①删除单个节点

1 m_treeCtrl.DeleteItem(delItem);

②删除所有节点

1 m_treeCtrl.DeleteAllItems();

修改节点名

1 m_treeCtrl.SetItemText(m_treeCtrl.GetSelectedItem(),"newNodeName");//修改当前选中节点名为newNodeName

获得节点句柄

 1 //获得根节点
 2 HTREEITEM hRootItem;
 3 hRootItem = m_treeCtrl.GetRootItem();
 4 //获得当前节点
 5 HTREEITEM hCurItem;
 6 hCurItem = m_treeCtrl.GetSelectedItem();
 7 //获得hItem的前一个节点
 8 HTREEITEM hPreItem;
 9 hPreItem = m_treeCtrl.GetNextItem(hItem,TVGN_PREVIOUS);
10 //获得hItem的后一个节点
11 HTREEITEM hNextITem;
12 hNextITem = m_treeCtrl.GetNextItem(hItem,TVGN_NEXT);

展开或收缩子节点

1 if(m_treeCtrl.ItemHasChildren(hRoot))//判断某个节点是否有孩子节点
2     m_treeCtrl.Expand(hRoot,TVE_EXPAND);//展开或收缩子节点

选择某节点后,并让其获得焦点

1 m_treeCtrl.SetItemState(hItem,TVIS_SELECTED,TVIS_SELECTED);//设置节点状态为被选中
2 m_treeCtrl.SelectItem(hItem);
3 //或者
4 //TREE控件样式必须设置为TVS_SHOWSELALWAYS
5 m_treeCtrl.SelectItem(hItem)//选择该节点
6 m_treeCtrl.SetFocus();//设置焦点

判断鼠标是否有击中节点并获得击中节点

1 CPoint point;
2 GetCursorPos(&point);
3 ::ScreenToClient(m_treeCtrl.GetSafeHwnd(),&point);
4 UINT uFlags;
5 uFlags = TVHT_ONITEM;
6 HTREEITEM    hItem = m_treeCtrl.HitTest(point,&uFlags);
7 if(hItem && (TVHT_ONITEM & uFlags))
8 {}

参考

https://blog.csdn.net/shuilan0066/article/details/6638504

原文地址:https://www.cnblogs.com/huangsitao/p/10298096.html