CTreeCtrl基本使用
来源:互联网 发布:php开发流程 编辑:程序博客网 时间:2024/06/06 03:13
在OnInitDialog()函数中初始化CTreeCtrl
//初始化CTreeCtrl,为节点添加图片
//资源ID,显示的图标x轴像素,分组
m_pImage->Create(IDB_BITMAP1,24,2,RGB(255,255,255));
m_TreeCtrl.SetImageList(pImage,TVSIL_NORMAL);
//插入root节点
HTREEITEM hRoot = m_TreeCtrl.InsertItem(saValues1[0],0,0,TVI_ROOT,TVI_LAST);
m_TreeCtrl.SetItemData(hRoot,(DWORD)pmbgeo);
//插入叶节点
HTREEITEM ITEM = m_TreeCtrl.InsertItem(saValues2[0],2,2,hRoot,TVI_SORT);
m_TreeCtrl.SetItemData(ITEM,(DWORD)pgridgeo);
//展开节点
m_TreeCtrl.Expand(hRoot,TVE_EXPAND);
//显示第一个节点
HTREEITEM hItem = m_TreeCtrl.GetRootItem();
m_TreeCtrl.Select(hItem,TVGN_FIRSTVISIBLE);
//鼠标单击消息
OnClickTreeMaplist(NMHDR* pNMHDR, LRESULT* pResult)
{
BOOL bCheck ;
CPoint myPoint;
GetCursorPos(&myPoint) ;
m_TreeCtrl.ScreenToClient(&myPoint) ;
UINT uFlags;
//确定相对于工作区的树视图控件的指定点的位置
HTREEITEM hItem = m_TreeCtrl.HitTest(myPoint, &uFlags);
//获取复选框消息 -- TVHT_ONITEMSTATEICONif (hItem && (TVHT_ONITEMSTATEICON & uFlags)){ //子节点状态随父节点 if (m_TreeCtrl.ItemHasChildren(hItem)) //父节点 { bCheck = m_TreeCtrl.GetCheck(hItem); //获取当前复选状态 SetChildCheck(hItem,!bCheck); //设置子项复选状态 { m_TreeCtrl.Expand(hItem,TVE_EXPAND); hItem = m_TreeCtrl.GetChildItem(hItem); //获取子项句柄 while (hItem) { m_TreeCtrl.SetCheck(hItem, bCheck); SetChildCheck(hItem,bCheck); //递归调用 hItem = m_TreeCtrl.GetNextSiblingItem(hItem); //获取兄弟的句柄 } } } else { HTREEITEM hParent = m_TreeCtrl.GetParentItem(hItem); CString str = m_TreeCtrl.GetItemText(hParent); m_TreeCtrl.Select(hParent,TVGN_CARET); }
}
//获取鼠标点击的节点和图标的消息 — TVHT_ONITEMLABEL|TVHT_ONITEMICON
if (hItem && (TVHT_ONITEMLABEL|TVHT_ONITEMICON & uFlags))
{
…
}//点击+-折叠展开树if (hItem && (TVHT_ONITEMBUTTON & uFlags)){ //获取Ctrl键是否被按住 short nState = GetKeyState(VK_CONTROL); if (nState == -127 || nState == -128) { UINT nItemExpand = m_TreeCtrl.GetItemState(hItem,TVIS_EXPANDED); if ((nItemExpand & TVIS_EXPANDED)!= TVIS_EXPANDED) //树处于收缩状态 { HTREEITEM hRoot = m_TreeCtrl.GetRootItem(); while(hRoot) { if (hRoot == hItem) { //不处理已经点击+-的节点 hRoot = m_TreeCtrl.GetNextItem(hRoot,TVGN_NEXT); continue; } UINT nExpand = m_TreeCtrl.GetItemState(hRoot,TVIS_EXPANDED); //判断每个父节点的收缩状态 if ((nExpand & TVIS_EXPANDED)!=TVIS_EXPANDED) { m_TreeCtrl.Expand(hRoot,TVE_EXPAND); } hRoot = m_TreeCtrl.GetNextItem(hRoot,TVGN_NEXT); } } else //处于展开状态 { HTREEITEM hRoot = m_TreeCtrl.GetRootItem(); while(hRoot) { if (hRoot == hItem) { hRoot = m_TreeCtrl.GetNextItem(hRoot,TVGN_NEXT); continue; } UINT nExpand = m_TreeCtrl.GetItemState(hRoot,TVIS_EXPANDED); if ((nExpand & TVIS_EXPANDED)==TVIS_EXPANDED) { //收缩节点 TVE_COLLAPSE m_TreeCtrl.Expand(hRoot,TVE_COLLAPSE); } hRoot = m_TreeCtrl.GetNextItem(hRoot,TVGN_NEXT); } } m_TreeCtrl.Select(hItem,TVGN_CARET); } }
}
//鼠标双击节点消息
OnDblclkTreeMaplist(NMHDR* pNMHDR, LRESULT* pResult)
{
//*pResult返回TRUE可以屏蔽双击展开节点操作
*pResult = TRUE;
}
- CTreeCtrl基本使用
- CTreeCtrl基本使用
- CTreeCtrl使用
- CTreeCtrl 使用
- CTreeCtrl 使用
- CTreeCtrl用法 CTreeCtrl使用详解
- CTreeCtrl用法 CTreeCtrl使用详解
- CTreeCtrl用法 CTreeCtrl使用详解 .
- CTreeCtrl用法 CTreeCtrl使用详解
- CTreeCtrl ---------基本用法总结
- CTreeCtrl的基本用法
- CTreeCtrl使用详细说明
- 新手使用CTreeCtrl
- CtreeCtrl的使用
- CTreeCtrl的使用(一)
- CTreeCtrl 控件使用总结
- VC6使用CTreeCtrl目录
- CTreeCtrl使用总结
- 入门级RxJava
- 正则表达式 re.findall 用法
- 目前普遍使用的框架是ssm框架,ssh框架基本是以前的项目中用到
- 项目编译报错 未配置输出路径
- CodeForces
- CTreeCtrl基本使用
- Codevs 3304 水果姐逛水果街Ⅰ
- 高级程序员的自我修养
- C# ORM 泛型与反射的交叉应用
- 23种设计模式(4):建造者模式
- 算法竞赛入门经典--训练指南 笔记
- Java线程(一)
- vue-cli手脚架模板使用sass
- Hibernate hql 2