我已调用m_TreeCtrl->EditLabel(hItem),使hItem处于编辑状态下,我想修改hItem的名称,然后在失去编辑状态后,其名称为修改后的名称。

解决方案 »

  1.   

    void CXXTreeCtrl::OnEndlabeledit(NMHDR* pNMHDR, LRESULT* pResult) 
    {
    TV_DISPINFO* pTVDispInfo = (TV_DISPINFO*)pNMHDR;

    // Called at exit from Edit Mode
    pTVDispInfo = (TV_DISPINFO *)pNMHDR;
    if (pTVDispInfo->item.pszText != NULL)
    {
    pTVDispInfo->item.mask = TVIF_TEXT;
    SetItem(&pTVDispInfo->item);
    }
    *pResult = 0;
    }
      

  2.   

    void CTestDlg::OnEndlabeleditTreeschm(NMHDR* pNMHDR, LRESULT* pResult) 
    {
    TV_DISPINFO* pTVDispInfo = (TV_DISPINFO*)pNMHDR;
    // TODO: Add your control notification handler code here
    CString ssss;
    m_Tree.GetEditControl()->GetWindowText(ssss);
    HTREEITEM treeitem=m_Tree.GetSelectedItem();

    m_Tree.SetItemText(treeitem,ssss); *pResult = 0;
    }
      

  3.   

    编辑结束后,会发送LVN_ENDLABELEDIT通知的,所以你只要处理这个通知就可以了。
      

  4.   

    void CTestDlg::OnEndlabeleditTreeschm(NMHDR* pNMHDR, LRESULT* pResult) 
    {
    *pResult = 1;
    }
      

  5.   

    我又有一个问题:就是在鼠标点击CTreeCtrl中的某项(Item)后,该项处于编辑状态,等待用户修改编辑,然后利用OnEndlabeledit响应把数据保存到文件中去。现在问题是,如果用户并没有修改,也即是项的名称并没有变化,也就不需要执行保存数据操作。如何判定项的名称失去编辑状态时,项的名称没有改变?
      

  6.   

    void CTestDlg::OnEndlabeleditTreeschm(NMHDR* pNMHDR, LRESULT* pResult) 
    {
    TV_DISPINFO* pTVDispInfo = (TV_DISPINFO*)pNMHDR;
    // TODO: Add your control notification handler code here
    CString ssss,ssss2;
    m_Tree.GetEditControl()->GetWindowText(ssss);//editlabel中的值
    ssss2=m_Tree.GetItemText(m_Tree.GetSelectedItem());//树控件节点上的值
    if(ssss==ssss2)
    {
    //说明项名称没变化
    }
    else
       m_Tree.SetItemText(m_Tree.GetSelectedItem(),ssss);*pResult = 0;
    }
      

  7.   

    http://www.cppblog.com/daiybh/archive/2005/09/29/489.html