三态选择树实现终结者

雪花飞舞77金牛

雪花飞舞77金牛

2016-01-29 12:06

三态选择树实现终结者,三态选择树实现终结者

三态选择树实现终结者
作者:南京银山网络有限公司 王佳豪

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/cyuyanjiaocheng/)

下载本文示例源代码

示例代码运行效果图如下:


在很多情况下,我们经常需要实现树的多态选择,如上图所示,当全部子节点选中的情况下,当前节点才被选中(如图示[荆门市]节点),当子节点部分选中时,当前节点处于第三态(如图示[湖北省]节点)当全部子节点未选中时,当前节点处于未选中的状态(如图示[江苏省]节点)。本文就介绍这种三态选择树的具体实现方法。

在VC知识库第十九期中河南科技大学丛雷朋友也介绍了一种实现方法,两种方法比较,本文介绍的方法实现简单,兼容原CTreeCtrl的全部操作,CheckBox也是采用控件本身的CheckBox,只是在状态显示时重画而已。因此,本方法可以实现表示三态的情况下同时显示节点ICON图标,另增加了对CheckBox在某些节点是否显示的控制,同时增加了对键盘空格键选中、取消选中的控制。具体遍历父、子节点的方法同丛雷朋友朋友的方法类似,也是递归实现全部节点的遍历,只是优化了一些,效率更高。

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/cyuyanjiaocheng/)

下面介绍具体使用方法:

步骤一:生成一个对话框工程(示例工程CMutiTree)。
步骤二:添加树控件,按照实际需要设置所需的属性。
步骤三:做节点图标和三态选择框图标



一般情况下节点图标采用16×16,三态选择图标采用13×13大小比较合适。
三态选择图标对应: 0-无选择钮 1-没有选择 2-部分选择 3-全部选择

步骤四:将两个文件[MutiTreeCtrl.cpp ,MutiTreeCtrl.h]添加到步骤一创建的对话框

工程中,在CMutiTreeDlg类的头文件中增加对[MutiTreeCtrl.h]的包含,此时工程中增加了CMutiTreeCtrl类。

#include "MutiTreeCtrl.h"
步骤五:用ClassWizard在CmutiTreeDlg中创建一个树控件CTreeCtrl的对象m_TripleTree,更改该对象为上面步骤四加入的CMutiTreeCtrl类的对象。

步骤六:在CMutiTreeDlg类中定义两个CImageList 类的对象,用于加载CMutiTreeCtrl所需要的节点图标列表和三态选择框图标列表。
在CMutiTreeDlg类的头文件中:
CImageList m_imgList;CImageList m_imgState;
在对话框的初始化函数中:
m_imgState.Create(IDB_BITMAP_STATE,13, 1, RGB(255,255,255));m_imgList.Create(IDB_BITMAP_LIST,16, 1, RGB(255,255,255));m_TripleTree.SetImageList(&m_imgList,TVSIL_NORMAL);m_TripleTree.SetImageList(&m_imgState,TVSIL_STATE);
完成以上六步操作后,编译、运行,用键盘空格键或鼠标单击CheckBox改变其状态,您将看到不需要再增加任何代码,已经实现了三态选择树的功能。如果需要隐藏某些选择框,如根节点的选择框,只需要设置对应的节点状态为0即可:
m_TripleTree.SetItemState( hRoot, INDEXTOSTATEIMAGEMASK(0), TVIS_STATEIMAGEMASK );
上述代码将设置根节点不显示三态选择框。
我具体实现的思想是以Windows标准的CTreeCtrl类为基类派生一个类CMutiTreeCtrl,截获键盘和鼠标点击CheckBox的事件,在此消息响应函数中,更改CheckBox的状态,并搜索子节点、兄弟节点和父节点,更改其状态与上述逻辑一致。方法如下介绍:

一、 CTreeCtrl类为基类派生CMutiTreeCtrl类

class CMutiTreeCtrl : public CTreeCtrl{// Constructionpublic:CMutiTreeCtrl();// Attributespublic:// Operationspublic:// Overrides// Cl      
展开更多 50%)
分享

猜你喜欢

三态选择树实现终结者

C语言教程 C语言函数
三态选择树实现终结者

如何实现三态选择树

C语言教程 C语言函数
如何实现三态选择树

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

手指终结者攻略

电脑网络
手指终结者攻略

《终结者3》攻略流程

电脑网络
《终结者3》攻略流程

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

《终结者3》流程攻略

电脑网络
《终结者3》流程攻略

《终结者4救世主》4个族的游戏终结者研究攻略

电脑网络
《终结者4救世主》4个族的游戏终结者研究攻略

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

《天天飞车》闯关模式车型推荐攻略

《天天飞车》闯关模式车型推荐攻略

WTL字体类

WTL字体类
下拉加载更多内容 ↓