樹控件在很多時候都可以用得到,本來覺得網上應該有很多資料,可以找個例子幾行行代碼就可以解決了的,
但是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這個屬性