三态选择树实现终结者

2016-01-29 12:06 16 1 收藏

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

【 tulaoshi.com - C语言心得技巧 】

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

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

下载本文示例源代码

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


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

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

下面介绍具体使用方法:

步骤一:生成一个对话框工程(示例工程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类

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com)
class CMutiTreeCtrl : public CTreeCtrl{// Constructionpublic:CMutiTreeCtrl();// Attributespublic:// Operationspublic:// Overrides// Cl
                        

来源:http://www.tulaoshi.com/n/20160129/1484640.html

延伸阅读
学会七招做痘痘肌终结者 痘痘肌人群的肤质其实是比较复杂的,大多是油性肌、也有混合肌和过敏肌,容易出油、缺水、很多化妆品不能用,饮食上也有很多需要注意的。在护肤方面自然也有别于其他肤质的妹子了。今天就给痘痘肌妹子带福利,看看该怎么保养,在日常中渐渐远离痘痘肌! 痘痘位置反映身体情况 痘痘冒不停除了跟肤...
Photoshop老手们常说,学习PS都是从改图开始。通过前两篇赏析和理论以及入门的教程,想必大家对“移花接木”有了一定的掌握,所以在第三篇教程中,我们将会综合用到“移花接木”中的换脸、换背景以及拼接应用,打造全新的“终结者-TXBK”。 特别说明一下,本教程对应PS入门者,旨在让初学者了解和掌握基本的PS技巧,故没用运用过多“花哨”的效...
《终结者4救世主》游戏安装心得1.我下的是BT版,然后下载小旅鼠遗漏的ADDON.DAT文件。放进你下载的游戏文件夹中。 2.然后开始安装,安装过程中会自动安装oalinst和PhysX,然后就开始安装动画文件,不过安装完毕后,我发现游戏安装文件夹的大小只有4G多,显然动画文件没有安装成功,于是我把movie.DAT文件后缀名改为EXE,然后安装,她会提示安装...
《终结者4救世主》安装全指南 游戏安装失败的玩家请按以下方式进行游戏释放 因为DATA1.CAB在游戏的盘中不存在导致安装程序无法进行 唯一的办法是手动释放文件,接下来发布一下解决办法,希望各位尝试后能给我回复一下成功与否 首先用虚拟光驱加载游戏镜像,用那个软件打开镜像里的HDR文件,现在你应该在FEATURES一栏,跳过此栏,点击下方的CO...
终结者2审判日怎么卡毒 在本作中,每隔特定时间,游戏会逐渐进行区域限制不断缩小游戏地图,在限定区域外的玩家将会不断损失HP,因此限定区域外又被玩家称为毒圈。而一种依托毒圈的战术就此诞生,就是俗称的卡毒。 随着限定区域到来的时间!在这期间内蓝圈会不断向白圈围拢。那么为什么要卡毒呢?又是在何时开始卡毒呢? 最危险的...

经验教程

314

收藏

89
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部