/添加树状/
HTREEITEM hItem,hChildItem; //定义树状控件的句柄
CTreeCtrl *pTree = (CTreeCtrl*)GetDlgItem(IDC_TREE);//定义一个树状控件的指针指向ID为IDC_TREE的树状控件
hItem = pTree->GetRootItem();//获取树状控件的根节点,赋给句柄hItem  (这里假设“根”下面是“父节点”,“父”下面是“子节点”)
//矩阵ID
int intMatrixID  = InsertMatrixDlg.m_InsertMatrixID;
char sTemid[100];
itoa(intMatrixID,sTemid,10);
sID = sTemid;
sID = "北京(ID."+sID+")";
hChildItem= pTree->InsertItem(sID.c_str(),NULL,NULL,hItem);//将hChildItem句柄指向根节点hItem的下级节点,并给这个下级节点命名字符串sID
//创建时间
sCreatTime = InsertMatrixDlg.m_InsertTime;
sCreatTime = "创建时间:" + sCreatTime;
pTree->InsertItem(sCreatTime.c_str(),NULL,NULL,hChildItem);//在父节点hChildItem(单词与假设的没有匹配)下添加子节点,并给子节点命名字符串sCreatTime
//地址
string temp;
temp = InsertMatrixDlg.m_InsertMatrixIP;
char sTemPort[100];
itoa(InsertMatrixDlg.m_InsertMatrixPort,sTemPort,10);
sMatrixAdd ="地址:" + temp + ":" + sTemPort;
pTree->InsertItem(sMatrixAdd.c_str(),NULL,NULL,hChildItem);//(添加子节点的兄弟节点)在父节点hChildItem(单词与假设的没有匹配)下添加子节点,并给子节点命名字符串sTemPort
//类型
if (InsertMatrixDlg.m_InsertType == 0 )
{
sType = "类型:XG-1200平台";
pTree->InsertItem(sType.c_str(),NULL,NULL,hChildItem);//(添加子节点的兄弟节点)
}
else if (InsertMatrixDlg.m_InsertType == 1 )
{
sType = "类型:中威平台";
pTree->InsertItem(sType.c_str(),NULL,NULL,hChildItem);//(添加子节点的兄弟节点)
}
else if (InsertMatrixDlg.m_InsertType == 2 )
{
sType = "类型:中创平台";
pTree->InsertItem(sType.c_str(),NULL,NULL,hChildItem);//(添加子节点的兄弟节点)
}
//端口
char sRet1[100],sRet2[100];
itoa(m_iniFile.m_nMatPort,sRet1,10);
itoa(InsertMatrixDlg.m_InsertMatrixPort,sRet2,10);
sPort = "端口:";
sPort = sPort + sRet2;
sPort = sPort +"-"+sRet1;
pTree->InsertItem(sPort.c_str(),NULL,NULL,hChildItem);//(添加子节点的兄弟节点)
//状态
sMatrixState = "状态:离线";
pTree->InsertItem(sMatrixState.c_str(),NULL,NULL,hChildItem);//(添加子节点的兄弟节点)
//平台地址
char sRet[100];
itoa(m_iniFile.m_nPlatformPort,sRet,10);
sPlatAdd = "平台地址:"+m_iniFile.m_sPlatformIP+":"+sRet;
pTree->InsertItem(sPlatAdd.c_str(),NULL,NULL,hChildItem);//(添加子节点的兄弟节点)
//平台状态
sPlatState = "平台状态:离线";
pTree->InsertItem(sPlatState.c_str(),NULL,NULL,hChildItem);//(添加子节点的兄弟节点)
//写日志
UpdateData(TRUE);
if (m_logList.GetCount()==m_nMaxRow)
{
m_logList.DeleteString(0);
}
showLog = GetCurrentTime();
showLog = showLog + "删除矩阵:"+sTempID;
m_logList.AddString(showLog.c_str());
SaveLogFile(showLog);
/删除树状///
//删除矩阵
void CPMAgentManageDlg::OnMenuitemDelete()
{
// TODO: Add your command handler code here
UpdateData(TRUE);
CString sText;
int ret=1;
string show,show1,show2;
sText = m_TreeCtrl.GetItemText(m_TreeCtrl.GetSelectedItem());//获取当前鼠标所在控件的行的文本
if (sText == "矩阵信息")
{
MessageBox("请选择矩阵!");
return;
}
HTREEITEM hItem,hItemChild;
CTreeCtrl *pTree = (CTreeCtrl*)GetDlgItem(IDC_TREE);
hItem = pTree->GetRootItem();//定位到根节点
hItemChild = pTree->GetChildItem( hItem );//得到父结点(单词写错了)
for (hItemChild = pTree->GetChildItem( hItem );hItemChild !=NULL;hItemChild = pTree->GetNextSiblingItem(hItemChild))
{
CString temp = m_TreeCtrl.GetItemText(hItemChild);
if (strcmp(sText , temp)==0)    //如果鼠标定位在父节点上面,直接删除父节点
{
show1 = "确认删除:";
show2 = sText;
show = show1 +show2 +"?";
if(MessageBox(show.c_str(),"提示",MB_OKCANCEL) ==  IDOK)
{
m_TreeCtrl.DeleteItem(hItemChild);    //删除这个节点(父节点)(单词写错了)
CMarkup xml;
xml.Load(g_sFilefullPath.c_str());
xml.ResetMainPos();
xml.FindElem();
while (xml.FindChildElem("matrix"))
{
string sTempID =  "北京(ID."+xml.GetChildAttrib("id")+")";
if (strcmp(sText,sTempID.c_str())==0)
{
xml.RemoveChildElem();
//写日志
UpdateData(TRUE);
if (m_logList.GetCount()==m_nMaxRow)
{
m_logList.DeleteString(0);
}
showLog = GetCurrentTime();
showLog = showLog + "删除矩阵:"+sTempID;
m_logList.AddString(showLog.c_str());
SaveLogFile(showLog);
}
}
xml.Save(g_sFilefullPath.c_str());
ret =0;
}
else
{
return;
}
}
}
if(ret)                 //如果定位在子节点上,现在是想删除子节点对应的父节点
{
HTREEITEM hParent = m_TreeCtrl.GetParentItem(m_TreeCtrl.GetSelectedItem());//先定位在子节点,在通过子节点定位到了父节点,用函数GetParentItem()
show1 = "确认删除:";
show2 = m_TreeCtrl.GetItemText(hParent);
show = show1 +show2 +"?";
if(MessageBox(show.c_str(),"提示",MB_OKCANCEL) ==  IDOK)
{
m_TreeCtrl.DeleteItem(m_TreeCtrl.GetParentItem(m_TreeCtrl.GetSelectedItem())); //删除这个父节点
CMarkup xml;
xml.Load(g_sFilefullPath.c_str());
xml.ResetMainPos();
xml.FindElem();
while (xml.FindChildElem("matrix"))
{
string sTempID =  "北京(ID."+xml.GetChildAttrib("id")+")";
if (strcmp(show2.c_str(),sTempID.c_str())==0)
{
xml.RemoveChildElem();
//写日志
UpdateData(TRUE);
if (m_logList.GetCount()==m_nMaxRow)
{
m_logList.DeleteString(0);
}
showLog = GetCurrentTime();
showLog = showLog + "删除矩阵:"+sTempID;
m_logList.AddString(showLog.c_str());
SaveLogFile(showLog);
}
}
xml.Save(g_sFilefullPath.c_str());
ret =0;
}
else
{
return;
}
}
}
//读取树状结构控件//
//从xml文件中读取信息到树状控件中
//初始化矩阵信息列表
m_TreeCtrl.ModifyStyle(NULL,TVS_HASBUTTONS|TVS_HASLINES|TVS_LINESATROOT); //设置树状控件的风格,带'+' '-'
HTREEITEM hItem,hSubItem;
CTreeCtrl *pTree = (CTreeCtrl*)GetDlgItem(IDC_TREE);
hItem= pTree->InsertItem("矩阵信息",NULL,NULL);         //设置根节点,命名为矩阵信息
xml.ResetMainPos();   //定位到xml文件的根
xml.FindElem();
string sID,sMatrixAdd,sCreatTime,sType,sPort,sMatrixState,sPlatAdd,sPlatState;
while (xml.FindChildElem("matrix"))
{
//矩阵ID
sID =  "北京(ID."+xml.GetChildAttrib("id")+")";
hSubItem = pTree->InsertItem(sID.c_str(),NULL,NULL,hItem);
//创建时间
sCreatTime = "创建时间:"+xml.GetChildAttrib("create_time");
pTree->InsertItem(sCreatTime.c_str(),NULL,NULL,hSubItem);
//地址
sMatrixAdd = "地址:"+xml.GetChildAttrib("ip")+":"+xml.GetChildAttrib("port");
pTree->InsertItem(sMatrixAdd.c_str(),NULL,NULL,hSubItem);
//类型
CString tCString = xml.GetChildAttrib("type");
string tString(tCString.GetBuffer(100));
if (tString == "0")
{
sType = "类型:XG-1200平台";
pTree->InsertItem(sType.c_str(),NULL,NULL,hSubItem);
}
else if (tString == "1")
{
sType = "类型:中威平台";
pTree->InsertItem(sType.c_str(),NULL,NULL,hSubItem);
}
else if (tString == "2")
{
sType = "类型:中创平台";
pTree->InsertItem(sType.c_str(),NULL,NULL,hSubItem);
}
tCString.ReleaseBuffer(100);
//端口
char sRet[100];
itoa(m_iniFile.m_nMatPort,sRet,10);
sPort = "端口:"+xml.GetChildAttrib("serv_port")+"-"+sRet;
pTree->InsertItem(sPort.c_str(),NULL,NULL,hSubItem);
//状态
sMatrixState = "状态:离线";
pTree->InsertItem(sMatrixState.c_str(),NULL,NULL,hSubItem);
//平台地址
itoa(m_iniFile.m_nPlatformPort,sRet,10);
sPlatAdd = "平台地址:"+m_iniFile.m_sPlatformIP+":"+sRet;
pTree->InsertItem(sPlatAdd.c_str(),NULL,NULL,hSubItem);
//平台状态
sPlatState = "平台状态:离线";
pTree->InsertItem(sPlatState.c_str(),NULL,NULL,hSubItem);
nCount++;
}
//树状控件的展开和叠起
//展开/叠起树
void CPMAgentManageDlg::OnButtonMatrixinfomation()
{
// TODO: Add your control notification handler code here
HTREEITEM hItem,hItemChild;
CTreeCtrl *pTree = (CTreeCtrl*)GetDlgItem(IDC_TREE);
hItem = pTree->GetRootItem();
if (bExPand == TRUE)
{
m_TreeCtrl.Expand(hItem,TVE_EXPAND);//展开/叠起结点
for (hItemChild = pTree->GetChildItem( hItem );hItemChild !=NULL;hItemChild = pTree->GetNextSiblingItem(hItemChild))
{
m_TreeCtrl.Expand(hItemChild,TVE_EXPAND);//展开树
}
bExPand = FALSE;
return;
}
if (bExPand == FALSE)
{
m_TreeCtrl.Expand(hItem,TVE_COLLAPSE);//展开/叠起结点
for (hItemChild = pTree->GetChildItem( hItem );hItemChild !=NULL;hItemChild = pTree->GetNextSiblingItem(hItemChild))
{
m_TreeCtrl.Expand(hItemChild,TVE_COLLAPSE);//展开树
}
bExPand = TRUE;
return;
}
}

///鼠标右键树状控件以及其空白区域产生的事件

//右键树状区域
void CPMAgentManageDlg::OnRclickTree(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
CPoint point;
GetCursorPos(&point);
CPoint pointInTree = point;
m_TreeCtrl.ScreenToClient(&pointInTree);
HTREEITEM item;
UINT flag = TVHT_ONITEM;
item = m_TreeCtrl.HitTest(pointInTree,&flag);
if(item != NULL)   //有内容的地方是(IDR_MENU1)
{
m_TreeCtrl.SelectItem(item);
CMenu menu;
menu.LoadMenu(IDR_MENU1);
menu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON,point.x,point.y,this,NULL);
}
else  //空白的地方时添加(IDR_MENU2)
{
CMenu menu;
menu.LoadMenu(IDR_MENU2);
menu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON,point.x,point.y,this,NULL);
}
*pResult = 0;
}

vc++树状控件(TreeCtrl)用法相关推荐

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

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

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

    // PMAgentManageDlg.h HTREEITEM FindItem(HTREEITEM item,CString strText); BOOL IsTreeCtrlEditMessage ...

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

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

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

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

  5. VC++(关于CTreecontrol控件的用法 )

    当我们用鼠标单击树形控件的某一项(根节点or子项) 这是单击鼠标后的消息响应,当然也可以响应其他消息.这个调用的是OnSelchanged消息. void CTREEDlg::OnSelchanged ...

  6. VC的IP控件的用法

    //将CString型IP地址在IPAddressCtrl中显示 CString   strIP= "192.168.0.10 "; DWORD   =   inet_addr(s ...

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

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

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

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

  9. VC++ Tab Control控件的基本用法

    VC++ Tab Control控件的基本用法 该程序过程很简单,但是却说明了Tab Control控件的基本用法. 1. 新建一个MFC工程, 取名MyTab, 选择Dialog based, 然后 ...

最新文章

  1. trash-cli设置Linux 回收站
  2. (转载)新年——顺民的牢骚
  3. 【ACM】熊孩子的乐趣
  4. kubernetes 清理日志命令_Kubernetes之容器数据写满磁盘解决方法
  5. vsftpd的基于pam_mysql的虚拟用户机制
  6. 程序语言的奥妙:算法解读 ——读书笔记
  7. Compound创始人:Compound链要成为一个单一全球流动性网络
  8. 汇编语言-学习笔记(一)
  9. 《国富论》亚当-斯密 - 阅读思考和笔记
  10. 学习笔记:运算放大器(OPA)超详细讲解(内含运用电路仿真)
  11. Gmail代理收发邮件
  12. 利用指针及数组对国家名称按字典排序
  13. 安装Ubuntu 16.04后要做的事
  14. Jenkins教程(一)安装Jenkins
  15. opensuse下webqq桌面化
  16. 转:在收费车棚内丢失车辆的责任承担
  17. PHP判断几天是某月的上旬、中旬或下旬
  18. 【工业互联网】工业互联网平台建设,出发点、切入点及着力点;
  19. C:\wamp64\bin\mysql\mysql5.7.23\bin 远程连接
  20. Docker环境下Spring Boot应用内存飙升分析与解决

热门文章

  1. 动态规划算法实验报告_搞懂这几点,动态规划算法就是那么简单
  2. 软件测试工作都干些什么?
  3. 12 个实用的前端开发技巧总结
  4. c语言中各个符号的意义及作用是什么,C语言特殊符号意义
  5. ajax常见特效,用ajax实现正在载入的特效-Ajax编程
  6. 麓山滨江2021高考成绩查询,长沙2021高考成绩排名榜单,长沙各高中高考成绩喜报...
  7. c语言任意两个整数相减_大整数加减运算的C语言实现
  8. sparkpython效率低_Effective PySpark(PySpark 常见问题)
  9. linux实验报告一,linux实验报告
  10. linux服务器遭攻击,记一次linux服务器被攻击与防护