VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 3763|回复: 28

《实用VC编程之玩转控件》第15课:Tree树形控件

[复制链接]
51_avatar_middle
online_admins 发表于 2018-11-17 00:35:58 | 显示全部楼层 |阅读模式
1、控件简介:
Tree树形控件也是我们编程过程中比较常用的一个控件,而且在其他软件中也经常能看到,比如Windows系统中的资源管理器:
《实用VC编程之玩转控件》第15课:Tree树形控件

所以,接下来我就教大家如何来使用这个控件!

2、控件的使用:
a、拖拽Tree树形控件到对话框模版上;
b、一些常用的属性:
Check Boxes:结点前是否带有复选框;
Edit Labels:结点名字是否可编辑;
Has Buttons:父节点是否有+号可供展开;
Has Lines:父子结点之间是否有连接线;
Lines At Root:是否从根节点开始就带有虚线;
等等吧,大家可以根据自己的需要设置相关的属性。

c、为Tree树形控件绑定一个 CTreeCtrl 控件类型变量m_Tree;

3、控件的操作:
在树形控件中每一个结点都有一个句柄(HTREEITEM),同时插入结点时必须提供父结点句柄,(其中根Root结点只有一个,既不可以添加也不可以删除)利用
HTREEITEM InsertItem( LPCTSTR lpszItem, HTREEITEM hParent = TVI_ROOT, HTREEITEM hInsertAfter = TVI_LAST );
可以插入一个结点,pszItem为显示的字符,hParent代表父结点的句柄,当前添加的结点会排在hInsertAfter表示的结点的后面,返回值为当前创建的结点的句柄。

a、添加结点(有多种重载方式,先介绍第一种):
  1.     HTREEITEM hRoot = m_Tree.InsertItem(_T("父1"));
  2.     HTREEITEM hSub1 = m_Tree.InsertItem(_T("子1"), hRoot);
  3.     HTREEITEM hSub2 = m_Tree.InsertItem(_T("子2"), hRoot);

  4.     HTREEITEM hSub3 = m_Tree.InsertItem(_T("子子1"), hSub2);
复制代码

《实用VC编程之玩转控件》第15课:Tree树形控件

就这样,可以一层一层的向树形控件中插入节点。

b、获得节点的文本:m_Tree.GetItemText(hSub3);
c、设置节点的文本:m_Tree.SetItemText(hSub3, _T("abc"));

d、获得当前选中的节点:HTREEITEM hSelItem = m_Tree.GetSelectedItem();
e、设置当前选中的节点:m_Tree.SelectItem(hTreeItem);
f、默认上面的情况都是针对单选,那么Tree树形控件支不支持多选呢?答案是:默认不支持
不过可以通过给节点前面加上 CheckBox 复选框来解决!下个知识点举例讲解!
备注:那么不通过CheckBox 能不能实现多选呢?答案也是可以的,不过要写很多自定义代码,大家感兴趣的话可以看看这几篇文章,课堂上咱们就不讲解了:
http://www.codeguru.com/cpp/cont ... d/article.php/c629/
http://www.codeguru.com/cpp/cont ... d/article.php/c723/
http://www.codeguru.com/cpp/cont ... /article.php/c9219/

g、遍历子节点:
需要用到的相关函数:
  1. HTREEITEM GetRootItem( ); //得到根结点。
  2. HTREEITEM GetChildItem(HTREEITEM hItem); //得到子结点。
  3. HTREEITEM GetPrevSiblingItem/GetNextSiblingItem(HTREEITEM hItem); //得到指明结点的上/下一个兄弟结点。
  4. HTREEITEM GetParentItem(HTREEITEM hItem); //得到父结点。
复制代码

《实用VC编程之玩转控件》第15课:Tree树形控件

从根节点开始遍历所有节点,判断 CheckBox 是否勾选:

h、删除节点、删除所有节点:
  1. m_Tree.DeleteItem(hSub2); //删除节点
  2. m_Tree.DeleteAllItems();    //删除所有节点
复制代码


i:展开/收起所有节点:

j:编辑节点文本:
①、控件的 Edit Labels 属性设置为 True;
②、响应控件的 TVN_BEGINLABELEDIT 事件:
③、响应控件的 TVN_ENDLABELEDIT 事件:

k、插入带图标的节点:
这里面给大家准备几个ico图标,供程序使用,见附件!

①、将几个ico图标文件添加到工程资源中,ID分别为:IDI_ICON1、IDI_ICON2、IDI_ICON3
②、在对话框类类的头文件中加入对象声明:CImageList m_TreeImage;
③、在对话框的初始化函数中创建图像列表:BOOL bRet = m_TreeImage.Create(16, 16, ILC_MASK | ILC_COLOR32, 1, 1);
④、添加图标资源到图像列表:
⑤、关联Tree树形控件和图像列表:m_Tree.SetImageList(&m_TreeImage, TVSIL_NORMAL);
⑥、将InsertItem插入节点的代码进行修改:
《实用VC编程之玩转控件》第15课:Tree树形控件

这样就可以啦~!

其中 InsertItem 的第二个参数0和第三个参数1是ico图标在ImageList中的索引,第二个参数是节点默认的图标,第三个参数是节点被选中后的图标。

4、开源控件类:
codeproject 上面关于 Tree树形控件 的开源控件类可谓是很多啊,这里面给大家分享一下,需要哪种自己直接拿过去用就行了:

https://www.codeproject.com/Arti ... port-for-HTML-XML-S
《实用VC编程之玩转控件》第15课:Tree树形控件

https://www.codeproject.com/Arti ... -Supports-Transpare
《实用VC编程之玩转控件》第15课:Tree树形控件

https://www.codeproject.com/Articles/6597/CDeviceTree
《实用VC编程之玩转控件》第15课:Tree树形控件

https://www.codeproject.com/Arti ... -select-folders-and
《实用VC编程之玩转控件》第15课:Tree树形控件

https://www.codeproject.com/Articles/2243/COptionTree
《实用VC编程之玩转控件》第15课:Tree树形控件

https://www.codeproject.com/Arti ... operty-Tree-Control
《实用VC编程之玩转控件》第15课:Tree树形控件

https://www.codeproject.com/Arti ... gImage-in-CTreeCtrl
《实用VC编程之玩转控件》第15课:Tree树形控件

https://www.codeproject.com/Arti ... heckboxes-Supported
《实用VC编程之玩转控件》第15课:Tree树形控件

https://www.codeproject.com/Arti ... esque-Owner-Drawn-C
《实用VC编程之玩转控件》第15课:Tree树形控件

https://www.codeproject.com/Arti ... l-that-has-Open-Clo
《实用VC编程之玩转控件》第15课:Tree树形控件

https://www.codeproject.com/Arti ... Millers-COptionTree
《实用VC编程之玩转控件》第15课:Tree树形控件

https://www.codeproject.com/Articles/768/CNetworkTreeCtrl
《实用VC编程之玩转控件》第15课:Tree树形控件

https://www.codeproject.com/Arti ... FX-and-CHourglassFX
《实用VC编程之玩转控件》第15课:Tree树形控件

https://www.codeproject.com/Articles/2913/A-Tree-List-Control
《实用VC编程之玩转控件》第15课:Tree树形控件

https://www.codeproject.com/Arti ... wn-TreeList-Control
《实用VC编程之玩转控件》第15课:Tree树形控件

https://www.codeproject.com/Arti ... th-ToolTip-Based-On
《实用VC编程之玩转控件》第15课:Tree树形控件

https://www.codeproject.com/Arti ... ontrol-with-Columns
《实用VC编程之玩转控件》第15课:Tree树形控件

5、小作业:
①、给Tree树形控件添加右键弹出菜单,菜单中有个复制的菜单项,点击可以复制结点的文本;
②、点选控件的 CheckBox 后,实际上当前选中的结点不是我点击的结点,能否做到勾选CheckBox 之后,就选中该结点;
③、实现三态CheckBox,可以直接找开源类来实现:https://www.codeproject.com/Articles/847799/CQuadStateTree

具体操作细节见视频教程的演示和讲解!


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
教程在线观看地址:
https://www.bilibili.com/video/av38392055/?p=16
https://www.bilibili.com/video/av38392055/?p=17
MP4高清视频下载地址:链接:https://pan.baidu.com/s/16WulpXN2MuqF8h6qOuKPng 提取码:yb02
本节课件下载(回复后可见):
游客,如果您要查看本帖隐藏内容请回复

备注:VIP会员可免费下载本站所有资源(点击查看)
提示:通过购买VC驿站U盘打包(点击查看)也可加入终身Vip会员^_^




上一篇:《实用VC编程之玩转控件》第14课:Tab标签控件
下一篇:《实用VC编程之玩转控件》第16课:ListCtrl高级列表控件
78_avatar_middle
在线会员 发表于 2018-11-17 12:43:50 | 显示全部楼层
又更新不错,谢谢
98_avatar_middle
online_vip 发表于 2018-11-17 13:58:03 | 显示全部楼层
谢谢老大大哦
95_avatar_middle
在线会员 发表于 2018-11-17 21:10:56 | 显示全部楼层
老大啥时候把视频录制成mp4格式的就好了

点评

赞同,手机、平板也能看  发表于 2018-11-18 14:37
69_avatar_middle
在线会员 发表于 2018-11-18 20:08:08 | 显示全部楼层
又更新了,谢谢分享
57_avatar_middle
donate_vip 发表于 2018-11-18 20:47:48 | 显示全部楼层
感谢楼主的分享!
98_avatar_middle
在线会员 发表于 2018-11-20 10:22:12 | 显示全部楼层
越来越精彩
78_avatar_middle
online_vip 发表于 2018-11-21 10:20:33 | 显示全部楼层
感谢Syc大神的分享
16_avatar_middle
在线会员 发表于 2018-11-21 13:35:46 | 显示全部楼层
《实用VC编程之玩转控件》第15课:Tree树形控件
多谢楼主分享,学习了
41_avatar_middle
online_vip 发表于 2018-11-24 08:32:35 | 显示全部楼层
感谢楼主分享         
22_avatar_middle
在线会员 发表于 2018-11-24 19:01:06 | 显示全部楼层
《实用VC编程之玩转控件》第15课:Tree树形控件《实用VC编程之玩转控件》第15课:Tree树形控件《实用VC编程之玩转控件》第15课:Tree树形控件
62_avatar_middle
online_vip 发表于 2018-11-25 19:38:22 | 显示全部楼层
第15课免费试看
08_avatar_middle
在线会员 发表于 2018-11-25 21:45:27 | 显示全部楼层
《实用VC编程之玩转控件》第15课:Tree树形控件《实用VC编程之玩转控件》第15课:Tree树形控件《实用VC编程之玩转控件》第15课:Tree树形控件
76_avatar_middle
在线会员 发表于 2018-11-26 10:20:46 | 显示全部楼层
学习!!!!!!!!!!!!
10_avatar_middle
在线会员 发表于 2018-11-27 09:45:57 | 显示全部楼层
感谢老大又更新了,速度下载学习
02_avatar_middle
在线会员 发表于 2018-11-30 03:15:27 | 显示全部楼层
老大万岁,万万岁!
56_avatar_middle
在线会员 发表于 2018-12-2 09:30:22 | 显示全部楼层
第15课:Tree树形控件
13_avatar_middle
online_vip 发表于 2018-12-3 10:31:29 | 显示全部楼层
helloworld
83_avatar_middle
online_vip 发表于 2018-12-3 18:26:35 | 显示全部楼层

继续学习

楼主辛苦
61_avatar_middle
在线会员 发表于 2018-12-16 20:47:23 | 显示全部楼层

感谢楼主的分享!
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2019-4-20 09:17

Powered by Discuz! X3.4

© 2009-2019 cctry.com

快速回复 返回顶部 返回列表