如何实现三态选择树——重点是树的遍历
来源:互联网 发布:javaweb数据字典使用 编辑:程序博客网 时间:2024/05/21 10:48
有时候我们经常需要实现树的多态选择,本文就介绍一种三态选择树的具体实现。
步骤一:生成一个对话框工程。
步骤二:添加树控件,设置所需的属性。
步骤三:做三态选择框图标,且在OnInitDialog()中初始化树,使树控件与选择框图标所构成的图像列表控件联系,具体实现看源代码。
步骤四:实现树的左击消息,实现三态选择。
TravelChild(HTREEITEM hItem, int m1);
TravelSiblingAndParent(HTREEITEM hItem,int m1); 来实现。
代码如下:
步骤一:生成一个对话框工程。
步骤二:添加树控件,设置所需的属性。
步骤三:做三态选择框图标,且在OnInitDialog()中初始化树,使树控件与选择框图标所构成的图像列表控件联系,具体实现看源代码。
步骤四:实现树的左击消息,实现三态选择。
void CMutiTreeDemoDlg::OnClickTree1(NMHDR* pNMHDR, LRESULT* pResult) {UINT uFlags=0;HTREEITEM hPItem;CPoint point = GetCurrentMessage()->pt;ScreenToClient(&point);point.Offset(-8,-16);HTREEITEM hItem =m_TripleTree.HitTest(point, &uFlags);if ( (uFlags&TVHT_ONITEM) ){hPItem=m_TripleTree.GetParentItem(hItem);int m,n,m1,n1;m_TripleTree.GetItemImage(hItem,m,n);if(m!=1){m_TripleTree.SetItemImage(hItem,1,1);m_TripleTree.GetItemImage(hItem,m1,n1);TravelChild(hItem, m1);if(hPItem!=NULL)TravelSiblingAndParent(hItem,m1);}else if(m==1){m_TripleTree.SetItemImage(hItem,0,0);m_TripleTree.GetItemImage(hItem,m1,n1);TravelChild(hItem, m1);if(hPItem!=NULL)TravelSiblingAndParent(hItem,m1);}//MessageBox("xxxx");}*pResult = 0;}这其中,最难实现的是树的遍历,我用递归
TravelChild(HTREEITEM hItem, int m1);
TravelSiblingAndParent(HTREEITEM hItem,int m1); 来实现。
代码如下:
//递归void CMutiTreeDemoDlg::TravelChild(HTREEITEM hItem,int m){HTREEITEM hChildItem,hBrotherItem;hChildItem=m_TripleTree.GetChildItem(hItem);m_TripleTree.SetItemImage(hChildItem,m,m);if(hChildItem!=NULL)TravelChild(hChildItem, m);hBrotherItem=m_TripleTree.GetNextSiblingItem(hChildItem);m_TripleTree.SetItemImage(hBrotherItem,m,m);if(hBrotherItem!=NULL)TravelChild(hBrotherItem, m);}void CMutiTreeDemoDlg::TravelSiblingAndParent(HTREEITEM hItem, int m){int m1,n1;HTREEITEM hNextSiblingItem,hPrevSiblingItem,hParentItem;m1=m;hNextSiblingItem=m_TripleTree.GetNextSiblingItem(hItem);while(hNextSiblingItem!=NULL){m_TripleTree.GetItemImage(hNextSiblingItem,m1,n1);if(m1!=m)break;else{hNextSiblingItem=m_TripleTree.GetNextSiblingItem(hNextSiblingItem);if(hNextSiblingItem!=NULL)m_TripleTree.GetItemImage(hNextSiblingItem,m1,n1);}}hPrevSiblingItem=m_TripleTree.GetPrevSiblingItem(hItem);while(hPrevSiblingItem!=NULL){m_TripleTree.GetItemImage(hPrevSiblingItem,m1,n1);if(m1!=m)break;else{hPrevSiblingItem=m_TripleTree.GetPrevSiblingItem(hPrevSiblingItem);if(hPrevSiblingItem!=NULL)m_TripleTree.GetItemImage(hPrevSiblingItem,m1,n1);}}if(m1==m){hParentItem=m_TripleTree.GetParentItem(hItem);if(hParentItem!=NULL){m_TripleTree.SetItemImage(hParentItem,m1,m1);TravelSiblingAndParent(hParentItem,m1);}}if(m1!=m){hParentItem=m_TripleTree.GetParentItem(hItem);while(hParentItem!=NULL){m_TripleTree.SetItemImage(hParentItem,2,2);hParentItem=m_TripleTree.GetParentItem(hParentItem);}}}
- 如何实现三态选择树——重点是树的遍历
- 如何实现三态选择树
- 三态树的实现
- 三态选择树实现终结者
- 三态选择树实现终结者
- 三态选择树实现终结者
- VC6 三态树的实现
- 三态树
- 三态树
- 不用风格的三态树控件的实现(ThreeStateTreeView)
- QTreeWidget树的三态操作
- QTreeWidget树的三态操作
- QTreeWidget树的三态操作
- 制作完美的 Qt 三态树列表
- QTreeWidget树内置的三态操作
- 开关的第三态——系
- 网页checkbox三态的实现
- QT实现按钮的三态
- 编程小技巧
- 程序员面试题精选100题(47)-数组中出现次数超过一半的数字[算法]
- LINUX系统下解决time_wait 连接数过多问题
- mysql图形管理工具 mysqlphpadm安装
- [技术] 光伏发电系统设计与简易计算方法
- 如何实现三态选择树——重点是树的遍历
- java.util.vector中的vector的详细用法
- jQuery jsonp跨域原理
- 软件开发中几个常用功能的实现
- Future模式
- Sql Server -partition by 使用说明 -分组排序-分组并查询其他字段
- TI的JPEG算法库在DM6437上的实现之encode和decode
- OpenLayer(Style & CSS)
- 成功销售心理学(1)