天天看点

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

}

}