// 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);   //结束编辑
 

// 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);
}
}   

修改树状控件TreeCtrl的节点名称相关推荐

  1. vc++树状控件(TreeCtrl)用法

    /添加树状/ HTREEITEM hItem,hChildItem; //定义树状控件的句柄 CTreeCtrl *pTree = (CTreeCtrl*)GetDlgItem(IDC_TREE);/ ...

  2. VC中树状控件(TreeCtrl)的用法

    树形控件可以用于树形的结构,其中有一个根接点(Root)然后下面有许多子结点,而每个子结点上有允许有一个或多个或没有子结点.MFC中使用CTreeCtrl类来封装树形控件的各种操作.通过调用 BOOL ...

  3. 将DataTable中的数据,根据节点的子父节点的Tag。展示到TreeView树状控件中。

    //移除所有分类tvBookType.Nodes.Clear();try{dt = BookTypeServices.GetBookType();}catch (Exception ex){Messa ...

  4. 树状控件的应用(选择出阵武将)

    树状控件的应用 何志丹 下面是树状控件的一些应用,由于是由于用于演示,所以结构并不合理.其效果如图所示.. 步骤如下: 1,Insert -> new class,插入一个新类CMyCtrl,基 ...

  5. PIE SDK图层树伙伴控件示例

    1.  功能简介 TocControl控件的主要作用是显示当前加载的图层有哪些.采用什么样的符号等,目的是使用户对当前加载的数据和结构有一个总体的把握.与之相关联的伙伴控件有MapControl,Pa ...

  6. 树型控件TreeView的几种用法

    1 基本用法 void TreeViewDataBind()         {             //首先清除树型控件内的结点             this.TreeView1.Nodes ...

  7. Element ui tree树形控件获取当前节点id和父节点id

    低版本Element ui tree树形控件获取当前节点id和父节点id的方法:点击查看 最新版本Element ui tree树形控件获取当前节点id和父节点id教程: 1.找到node_modul ...

  8. VC控件 TreeCtrl 与 ListCtrl 演示(zz)

    VC控件 TreeCtrl 与 ListCtrl 演示 作者:兰州大学现物系 王景生 下载源代码 这个例子类似于 Windows 的资源管理器,程序运行界面如图一所示: 图一 主要用到的类有: CLi ...

  9. layui如何获取父节点的父节点_element-ui tree控件获取当前节点和父节点

    今天使用element-ui 遇到两个问题,第一个问题是获取tree控件的当前节点和父节点, 一开始使用tree控件的getCurrentNode()函数,结果发现返回的是当前节点的data属性,和u ...

最新文章

  1. SSH、VIM显示中文乱码解决方法
  2. 用PHP生成word文件
  3. 关于小程序的一些坑的总结
  4. GDI+ 设置不同的分辨率来显示不同大小的图片
  5. LeetCode 539. 最小时间差(哈希)
  6. 机器人被抢走ntr_(科普)当被NTR剧情虐到的时候怎么办
  7. 11.04.30 半夜清晨
  8. Spring Boot 开源软件都有哪些?
  9. NGUI中的Table自定义排序
  10. IIS出现server application error解决方案
  11. vue如何设置视频封面_vue设置视频封面教程 vue如何修改标题
  12. 智慧产业园区综合解决方案
  13. 微信小程序实现随机标签云
  14. 为什么边缘概率密度是联合概率密度的积分_看懂蒙特卡洛积分(一) 概率分布变换与随机采样...
  15. 了解透明数据加密 (TDE)
  16. 聪明的猴子 黑暗爆炸 - 2429
  17. 桌面上计算机删除后怎么复原,电脑桌面上出现一个图标,删掉后重启桌面又恢复了?怎么才能彻底删除?...
  18. Python学习-Scipy库稀疏矩阵的建立(面向列的稀疏矩阵、基于坐标格式的稀疏矩阵)
  19. 如何租用云服务器并进行远程连接
  20. 三:debian安装,附加开店系统

热门文章

  1. 03-29 健壮性测试
  2. easypoi导出数值型_解决EasyPoi导出Excel金额数值类型
  3. mysql命令导出数据不完整_使用MySQL MySqldump命令导出数据时的注意事项
  4. php源生生成pdf_TCPDF - 可生成PDF文档和条形码PHP库
  5. 网站前端开发基础知识学什么?必备技能
  6. mysql数据字典的通俗理解_MySQL关于数据字典的一个疑问
  7. oracle number 7 5,oracle上机练习6-7及答案
  8. java正则 链接_Java使用正则表达式匹配获取链接地址的方法示例
  9. windows linux内核版本,微软决定在Windows10中发布一个完整的Linux内核
  10. 昆工c语言题库,昆明理工大学C语言期末统考试题