修改树状控件TreeCtrl的节点名称

修改树状控件TreeCtrl的节点名称
转载
http://blog.csdn.net/lxh1230119/article/details/7756372

版权声明:本文为博主原创文章,未经博主允许不得转载。
[cpp] view plain copy
// PMAgentManageDlg.h
HTREEITEM FindItem(HTREEITEM item,CString strText);
BOOL IsTreeCtrlEditMessage(WPARAM KeyCode);

virtual void OnOK();
virtual void OnCancel();
afx_msg void OnMenuitemRevise(NMHDR *pNMHDR,LRESULT *pResult); //点击修改按钮激活函数
afx_msg void OnBeginlabeleditTree1(NMHDR* pNMHDR, LRESULT* pResult); //开始编辑
afx_msg void OnEndlabeleditTree1(NMHDR* pNMHDR, LRESULT* pResult); //结束编辑
[cpp] view plain copy

[cpp] view plain copy
// PMAgentManageDlg.cpp
ON_NOTIFY(TVN_BEGINLABELEDIT, IDC_TREE, OnBeginlabeleditTree1) //消息映射
ON_NOTIFY(TVN_ENDLABELEDIT, IDC_TREE, OnEndlabeleditTree1) //消息映射

//点击修改信息
void CPMAgentManageDlg::OnMenuitemRevise(NMHDR *pNMHDR,LRESULT *pResult)
{
// TODO: Add your command handler code here
UpdateData(true);
//CString str;
g_sSelectStr =m_TreeCtrl.GetItemText(m_TreeCtrl.GetSelectedItem());
//取出strName前4个汉字CString strName;
char cTem[100],cDest[100];
strcpy(cTem,g_sSelectStr);
char *sTem = cTem;
memcpy(cDest,sTem,8);
cDest[8]=’\0’;
string sCompare;
sCompare=cDest;
if ( (sCompare == “矩阵状态”) || (sCompare ==”平台状态”) || (sCompare ==”创建时间”) )
{
MessageBox(“此条信息禁止手动修改!”);
return;
}
else
{
m_TreeCtrl.ModifyStyle(NULL,TVS_EDITLABELS); //设置编辑风格
HTREEITEM hItem=m_TreeCtrl.GetSelectedItem();
m_TreeCtrl.EditLabel(hItem);
}
}

void CPMAgentManageDlg::OnBeginlabeleditTree1(NMHDR* pNMHDR, LRESULT* pResult)
{
TV_DISPINFO* pTVDispInfo = (TV_DISPINFO*)pNMHDR;
// TODO: Add your control notification handler code here
m_TreeCtrl.GetEditControl()->LimitText(1024);
*pResult = 0;
}

void CPMAgentManageDlg::OnEndlabeleditTree1(NMHDR* pNMHDR, LRESULT* pResult)
{
TV_DISPINFO* pTVDispInfo = (TV_DISPINFO*)pNMHDR;
// TODO: Add your control notification handler code here
HTREEITEM m_hInsertItem;
CString strName; //修改后的数据
m_TreeCtrl.GetEditControl()->GetWindowText(strName);
if (strName.IsEmpty())
{
MessageBox(“数据项名称不能为空,请重新输入!”);
CEdit *pEdit = m_TreeCtrl.EditLabel(m_hInsertItem);
return;
}
if (strName == g_sSelectStr)
{
return;
}
HTREEITEM hRoot = m_TreeCtrl.GetRootItem();
HTREEITEM hFind = FindItem(hRoot,strName); //判断数据是否相同
if (hFind == NULL)
{
char msg[64]={0};
sprintf(msg,”修改信息为%s,确定吗?”,strName);
if (MessageBox(msg,”提示”,MB_OKCANCEL) == IDOK)
{
CString strText;
m_TreeCtrl.GetEditControl()->GetWindowText(strText.GetBuffer(200),200);
m_TreeCtrl.SetItemText(m_TreeCtrl.GetSelectedItem(),strText);//设置编辑后的文本为结点
*pResult = TRUE;

    }  
    else  
    {  
        m_TreeCtrl.DeleteItem(m_hInsertItem);  
    }  
}  
else //找到相同数据  
{  
    if ((g_sSelectStr == "北京一区") || (g_sSelectStr =="矩阵地址") || (g_sSelectStr =="服务端口") )  
    {  
        MessageBox("该数据已存在");  
        CEdit *pEdit = m_TreeCtrl.EditLabel(m_hInsertItem);  
    }  
    else  
    {  
        char msg[64]={0};  
        sprintf(msg,"修改信息为%s,确定吗?",strName);  
        if (MessageBox(msg,"提示",MB_OKCANCEL) == IDOK)  
        {  
            CString strText;  
            m_TreeCtrl.GetEditControl()->GetWindowText(strText.GetBuffer(200),200);  
            m_TreeCtrl.SetItemText(m_TreeCtrl.GetSelectedItem(),strText);//设置编辑后的文本为结点  
            *pResult = TRUE;  


        }  
        else  
        {  
            m_TreeCtrl.DeleteItem(m_hInsertItem);  
        }  
    }  
}  
*pResult = 0;  

}

//防止修改的数据有相同 嵌套循环
HTREEITEM CPMAgentManageDlg::FindItem(HTREEITEM item,CString strText)
{
HTREEITEM hFind;
if (item==NULL)
{
return NULL;
}
while(item!=NULL)
{
if (m_TreeCtrl.GetItemText(item)==strText)
{
return item;
}
if (m_TreeCtrl.ItemHasChildren(item))
{
item = m_TreeCtrl.GetChildItem(item);
hFind = FindItem(item,strText);
if (hFind)
{
return hFind;
}
else
{
item = m_TreeCtrl.GetNextSiblingItem(m_TreeCtrl.GetParentItem(item));
}
}
else
{
item = m_TreeCtrl.GetNextSiblingItem(item);
if (item == NULL)
{
return NULL;
}
}
}
return item;
}

//判断是否处于编辑状态 传按键进去 然后发送消息
BOOL CPMAgentManageDlg::IsTreeCtrlEditMessage(WPARAM KeyCode)
{
BOOL rvalue = FALSE;
CWnd *pWnd = this;
CTreeCtrl treectrl = (CTreeCtrl )pWnd->GetDlgItem(IDC_TREE);
if(!treectrl)
{
return rvalue;
}
CWnd* focus = GetFocus();
CEdit* edit = treectrl->GetEditControl();
if((CEdit *)focus == edit)
{
if (KeyCode == VK_ESCAPE)
{
edit->SendMessage(WM_UNDO,KeyCode); //ESC撤销
}
if (KeyCode == VK_RETURN)
{
edit->SendMessage(WM_KEYDOWN,KeyCode); //回车就执行
}
rvalue = TRUE;
}
return rvalue;
}
//重载回车键
void CPMAgentManageDlg::OnOK()
{
if(!IsTreeCtrlEditMessage(VK_RETURN))
{
EndDialog(IDOK);
}
}
//重载退出键
void CPMAgentManageDlg::OnCancel()
{
if(!IsTreeCtrlEditMessage(VK_ESCAPE))
{
EndDialog(IDCANCEL);
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值