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

xiaoxiao2021-02-28  106

修改树状控件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); } }

转载请注明原文地址: https://www.6miu.com/read-22437.html

最新回复(0)