树形控件是一种可以分级显示项目列表的窗口,其所含项目以相互关联的方式显示在控件中,通过点击位于某个层次的项目节点可以展开下一层次中从属于该节点的所有项目。树形控件非常适合于管理那些层次较多且相互间隶属关系较为清晰的项目元素。在MFC中,由CTreeCtrl类提供了对树形控件的功能支持。
在用Create()创建了一个树形控件后可以用SetImageList()函数为其设置一个图象列表,这样就可以在树形控件中为各个层次的项目设置图标。通过InsertItem()函数可以为其添加数据项,返回的HTREEITEM类型的句柄唯一标识了此添加的项目。该句柄应当妥善保管,只有通过该句柄才能为此项目继续添加子项目。如果在创建子窗口时指定父窗口句柄为NULL,则将直接在根目录创建项目。下面这段代码将通过上述函数创建一个树形控件并向其添加二个层次的项目:
// 创建一个树形控件 m_ctrTreeCtrl.Create(WS_VISIBLE | WS_CHILD | WS_BORDER | TVS_LINESATROOT | TVS_HASLINES | TVS_HASBUTTONS | TVS_EDITLABELS, CRect(500, 50, 670, 200),this, IDC_TREE1); …… TV_ITEM tvItem; TV_INSERTSTRUCT tvInsert; tvItem.mask = TVIF_TEXT; // 指定pszText成员可用 tvItem.pszText = "Item0"; // 根项目显示的字符 tvInsert.hParent = TVI_ROOT; // 指定父句柄 tvInsert.item = tvItem; // 指定TV_ITEM结构对象 tvInsert.hInsertAfter = TVI_LAST; // 项目插入方式 // 创建根项目,当前项目句柄保存于hItem0中 HTREEITEM hItem0 = m_ctrTreeCtrl.InsertItem(&tvInsert); …… // 在根项目下继续创建第二层项目 tvItem.mask = TVIF_TEXT; tvItem.pszText = "SubItem0"; tvInsert.hParent = hItem0; tvInsert.item = tvItem; tvInsert.hInsertAfter = TVI_LAST; HTREEITEM hItem3 = m_ctrTreeCtrl.InsertItem(&tvInsert); |
作为同用户的接口,树形控件将在不同的动作下发出各种通知消息,可以在控件窗口的消息映射中添加ON_NOTIFY_REFLECT宏或是在控件所在父窗口的消息映射中添加ON_NOTIFY宏来为每一个通知消息指定处理函数。
树形控件中的任何一个项目均可以拥有一个子项目列表,此列表可以随时处于展开或缩起状态。当处于展开状态时,对应的子项目将以缩进方式显示在父项目下;当处于缩起状态时,子项目将不显示。当用户在双击父项目时,相应的子项目列表将自动在展开与缩起状态切换。在子项目列表状态发生改变时和状态改变完成后树形控件将分别发出TVN_ITEMEXPANDING和 TVN_ITEMEXPANDED通知消息。关于其它的通知消息及其具体含义可参见下表:
通知消息 |
消息说明 |
TVN_BEGINDRAG |
开始拖拽操作 |
TVN_BEGINLABELEDIT |
开始编辑标签 |
TVN_BEGINRDRAG |
开始鼠标右键拖拽操作 |
TVN_DELETEITEM |
删除一个指定的项目 |
TVN_ENDLABELEDIT |
结束编辑标签 |
TVN_GETDISPINFO |
获取一个项目的显示信息 |
TVN_ITEMEXPANDED |
子项目列表被展开或收起 |
TVN_ITEMEXPANDING |
子项目列表正将展开或收起 |
TVN_KEYDOWN |
键盘事件 |
TVN_SELCHANGED |
项目的选择发生改变 |
TVN_SELCHANGING |
项目的选择将要发生改变 |
TVN_SETDISPINFO |
通知更新一个项目的信息 |
分享到:
相关推荐
使用labview对树形控件进行常规操作,进行拖曳和移动
js树形控件js树形控件js树形控件js树形控件js树形控件js树形控件js树形控件js树形控件js树形控件js树形控件
LabVIEW中树形控件的基本操作
MFC中,动态添加、删除树形控件的节点,获取树形控件的选中项,绝对经典 !希望对你有所帮助!
在树形控件中插入背景图
labVIEW 实现树形控件的值拖拽的另一个树形控件中,任意形成节点
本文介绍了VC中常用的树形控件使用方法。
java树形控件java树形控件java树形控件java树形控件java树形控件java树形控件java树形控件java树形控件java树形控件java树形控件java树形控件
MFC中创建可编辑节点的树形控件绝对经典! 希望对你有所帮助!
树形 权限管理 权限管理系统 树形控件。
通过labview的树形控件来选择并编辑数据,同时将选择的数据显示在右侧的波形图表中。整个界面可根据用户需求自动缩放大小。
好用的vb树形控件,我找了好久的 axtree控件
树形控件的增删改查树形控件的增删改查 树形控件的增删改查树形控件的增删改查
Android使用ListView实现一个高性能无限层级显示的树形控件.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
jquery超漂亮树形控件
常用树形控件,有样例,一看即懂。常用树形控件,有样例,一看即懂。
zTree 非常强大的树形控件 、zTree v3.0 针对大数据量一次性加载进行了更深入的优化,实现了延迟加载功能,即不展开的节点不创建子节点的 Dom。 2)、对于每级节点最多一百左右,但总节点数几千甚至几万,且不是全部...
该资源主要是结合http://blog.csdn.net/eastmount/article/details/19120567文章,使用MFC树形控件CTreeCtrl左边显示我的电脑不同盘符下文件夹,双击路径能显示该文件夹下文件图标.是关于树形控件比较好的资源,含注释.
利用element树形控件菜单栏被触发时加载事件进行Element树形结构懒加载的动态加载。
开发项目的时候遇到需要在表单中选择参会人员,根据不同部门下选择不同的人,在element-ui中有树形控件能满足这种情况,后台封装数据记录一下。 封装格式: 返回数据格式: 接收数据的pojo类: 2018年4月12...