树控件在很多时候都可以用得到,本来觉得网上应该有很多资料,可以找个例子几行行代码就可以解决了的,
但是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);
}
}
添加一个“重命名”的菜单或者按钮,在其响应函数中加上下面几句代码,就可以实现重命名了
void CFileView::OnTreeRename()
{
HTREEITEM hSltItem = treeCtrl.GetFirstSelectedItem();
if(hSltItem)
{
CEdit* pLabelEdit = treeCtrl.EditLabel(hSltItem);
ASSERT(pLabelEdit != NULL);
}
}
还需要注意一点,需要将树控件的树形设置能够编辑,就是要有TVS_EDITLABELS这个属性