树控件在很多时候都可以用得到,本来觉得网上应该有很多资料,可以找个例子几行行代码就可以解决了的,
但是google了一下,关键字“树形控件 重命名”搜到的网页都不是我想要的,找了两个左右有用的网页看了一下,感觉都没有完全说清楚,
我决定先把必要的东西加上,然后边调边试,总算成功了,不说废话,看下面
首先加上树形控件的两个通知消息:TVN_BEGINLABELEDIT,TVN_ENDLABELEDIT,在响应函数中添加这两个消息的响应函数
void CFileView::OnTvnBeginLabelEditTree(NMHDR* pNMHDR, LRESULT* pResult)
{
LPNMTVDISPINFO pTVDispInfo = reinterpret_cast<LPNMTVDISPINFO>(pNMHDR);
}
void CFileView::OnTvnBeginLabelEditTree(NMHDR* pNMHDR, LRESULT* pResult) { LPNMTVDISPINFO pTVDispInfo = reinterpret_cast<LPNMTVDISPINFO>(pNMHDR); TV_ITEM* ptvItem = &pTVDispInfo->item; // 获取修改后的名称 CString LabelStr = ptvItem->pszText; // 对新输入的名称作一些限制 if(LabelStr == "") { return; } // 设置新名称 HTREEITEM curItem = ptvItem->hitem; if(curItem) { //treeCtrl 是CTreeCtrl的一个对象 treeCtrl.SetItemText(curItem, LabelStr); } }
添加一个“重命名”的菜单或者按钮,在其响应函数中加上下面几句代码,就可以实现重命名了还需要注意一点,需要将树控件的树形设置能够编辑,就是要有TVS_EDITLABELS这个属性void CFileView::OnTreeRename() { HTREEITEM hSltItem = treeCtrl.GetFirstSelectedItem(); if(hSltItem) { CEdit* pLabelEdit = treeCtrl.EditLabel(hSltItem); ASSERT(pLabelEdit != NULL); } }