在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 {}