CTreeCtrl如何修改節點名稱

 1)  設置ctreectrl  label editable 屬性 

 long lStyle=::GetWindowLong(m_tree.GetSafeHwnd(),GWL_STYLE);
 lStyle|=TVS_EDITLABELS;
 ::SetWindowLong(m_tree.GetSafeHwnd(),GWL_STYLE,lStyle);

或者  m_tree.ModifyStyle(0,TVS_EDITLABELS);

注意:此處設置TVS_EDITLABELS很重要,否則後面的都是白搭!!!

我在使用的時候,後面的begin和End的消息響應時間也寫了,死活都不出來!!!我在資源裏面也設置了可編輯,但是!!!!我在初始化樹結構信息的時候設置了樹的狀態,沒有設置TVS_EDITLABELS。也就是說,我設置的可編輯狀態又被我自己幹掉了!!!汗顏

2) 消息響應:

ON_NOTIFY(TVN_BEGINLABELEDIT, IDC_TREE_COMTYPE, &OnTvnBeginlabeleditTreeComtype)
ON_NOTIFY(TVN_ENDLABELEDIT, IDC_TREE_COMTYPE,    &OnTvnEndlabeleditTreeComtype)

ON_NOTIFY(NM_DBLCLK, IDC_TREE_COMTYPE, &OnNMDblclkTreeComtype)

我是用雙擊響應事件觸發的可編輯,NM_DBLCLK

具體的編輯相應是在TVN_ENDLABELEDIT中實現的

void OnTvnBeginlabeleditTreeComtype(NMHDR *pNMHDR, LRESULT *pResult)
{
    LPNMTVDISPINFO pTVDispInfo = reinterpret_cast<LPNMTVDISPINFO>(pNMHDR);
    // TODO: 在此添加控件通知處理程序代碼
    *pResult = 0;
}

void OnTvnEndlabeleditTreeComtype(NMHDR *pNMHDR, LRESULT *pResult)
{
    LPNMTVDISPINFO pTVDispInfo = reinterpret_cast<LPNMTVDISPINFO>(pNMHDR);
    // TODO: 在此添加控件通知處理程序代碼
    *pResult = 0;

    TV_ITEM item;
    item = pTVDispInfo->item;
    CString strName = item.pszText;
    if (strName == _T(""))
        return;

   // 業務邏輯
}

void OnNMDblclkTreeComtype(NMHDR *pNMHDR, LRESULT *pResult)
{
    HTREEITEM hSelItem = m_treeComType.GetSelectedItem();
    HTREEITEM hSelItemP = m_treeComType.GetParentItem(hSelItem);
   // 業務邏輯分析,進入編輯狀態
    {
        m_treeComType.SelectItem(hSelItem);  // 獲取節點
        m_treeComType.EditLabel(hSelItem);       // 編輯
        return; // 編輯結束一定要返回,否則會被後面一句搶去焦點
    }

    CEdit *pEdit = m_treeComType.GetEditControl();
    if (::IsWindow(pEdit->GetSafeHwnd()))
    {
        pEdit->SendMessage(WM_CLOSE);
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章