1.获取当前选择的节点名
CPoint point;
GetCursorPos(&point); // 当前鼠标坐标
m_tree.ScreenToClient( &point);
HTREEITEM hTest=m_tree.HitTest(point, &nFlag);
if(hTest)
{
m_tree.SelectItem(hTest);
CString strx,str=m_tree.GetItemText(hTest);
AfxMessageBox(str);
}
2.TREECTRL加节点图标
step1: 创建位图资源IDB_BITMAP1、IDB_BITMAP2(假设为16x16)
step3: 添加类成员 CImageList m_ImageList;
step3: OnInitDialog()
{
m_imageList.Create(16, 16, ILC_COLORDDB | ILC_MASK, 0, 1);
CBitmap bm1, bm2;
bm1.LoadBitmap(IDB_BITMAP1);
bm2.LoadBitmap(IDB_BITMAP2);
m_imageList.Add(&bm1, RGB(192, 192, 192));
m_imageList.Add(&bm2, RGB(192, 192, 192));
m_tree.SetImageList(&m_imageList, TVSIL_NORMAL);
}
step4:在插入节点时指定图标
m_tree.InsertItem(str1,0,0,hItem1);//参数2:图标索引;参数3:选中节点时的图标索引
m_tree.InsertItem(str2,1,1,hItem2);
3.展开具有2级子节点的树
HTREEITEM hc=m_tree.GetChildItem(hroot);
m_tree.Expand(hroot,TVE_EXPAND);
m_tree.Expand(hc,TVE_EXPAND);
while((hc=m_tree.GetNextItem(hc,TVGN_NEXT))!=NULL)
m_tree.Expand(hc,TVE_EXPAND);
4.右键编辑TREECTRL节点文本
(1)响应右键消息
void CForTestDlg::OnRclickTree1(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
m_tree.ModifyStyle(NULL,TVS_EDITLABELS); //设置编辑风格
HTREEITEM hItem=m_tree.GetSelectedItem();
m_tree.EditLabel(hItem);
*pResult = 0;
}
(2)响应TVN_BEGINLABELEDIT消息
void CForTestDlg::OnEndlabeleditTree1(NMHDR* pNMHDR, LRESULT* pResult)
{
TV_DISPINFO* pTVDispInfo = (TV_DISPINFO*)pNMHDR;
// TODO: Add your control notification handler code here
if(pTVDispInfo->item.pszText!=NULL) //未取消编辑
m_tree.SetItemText(pTVDispInfo->item.hItem,pTVDispInfo->item.pszText);
*pResult = 0;
}
(3)
void CForTestDlg::OnOK()
{
SetFocus(); //响应ENTER键
return;
}