读书人

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

发布时间: 2012-07-29 15:26:14 作者: rapoo

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

// PMAgentManageDlg.hHTREEITEM 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.cppON_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 hereUpdateData(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 herem_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 hereHTREEITEM 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); }}   

读书人网 >编程

热点推荐