当前位置: 首页 > 图文教程 > 开发语言 > VC++ > 三态选择树实现终结者
三态选择树实现终结者 下载本文示例源代码 在VC知识库第十九期中河南科技大学丛雷朋友也介绍了一种实现方法,两种方法比较,本文介绍的方法实现简单,兼容原CTreeCtrl的全部操作,CheckBox也是采用控件本身的CheckBox,只是在状态显示时重画而已。因此,本方法可以实现表示三态的情况下同时显示节点ICON图标,另增加了对CheckBox在某些节点是否显示的控制,同时增加了对键盘空格键选中、取消选中的控制。具体遍历父、子节点的方法同丛雷朋友朋友的方法类似,也是递归实现全部节点的遍历,只是优化了一些,效率更高。 下面介绍具体使用方法:
#include "MutiTreeCtrl.h" 在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的状态,并搜索子节点、兄弟节点和父节点,更改其状态与上述逻辑一致。方法如下介绍:
class CMutiTreeCtrl : public CTreeCtrl{// Constructionpublic: CMutiTreeCtrl();// Attributespublic:// Operationspublic:// Overrides // Cl |