当前位置: 首页 > news >正文

【MFC】树控件的使用详解

目录

添加线条链接

添加折叠小按钮

设置树控件的节点和对应的图标

设置默认选中项 

设置选中项切换响应函数 

涉及接口介绍:


首先我们通过资源视图可以添加一个树形控件,如下: 

添加线条链接

在树形控件中,有一个属性“Has Lines”,如下图所示(这里因为汉化的原因显示中文): 

当 “Has Lines”为true时,子节点与父节点之间会添加线条链接,效果如下:

上面虽然子节点与父节点之间虽然有线条链接,但是可以发现与根节点之间并没有线条链接,这里可以在设置 “Lines At Root”属性如下:

添加折叠小按钮

默认情况下,每个父项节点是没有“+”按钮,进行展开/收起子节点的,这里有一个属性“Has Buttons”,如下:

当 “Has Buttons”属性为true时,效果如下:

设置树控件的节点和对应的图标

第一步:准备icon资源,如果原始图片资源不是icon资源,我们可以先通过如下链接,将图片资源转换为icon格式

Convertio — 文件转换器https://convertio.co/zh/将准备好的icon资源放到项目所在目录下的res目录中

随后,在资源视图中添加资源->icon->导入

第二步:通过代码添加树控件节点和对应的图标

这里需要注意的是CImageList imgeList必须在头文件声明,因为这里是在初始化函数中执行的,当函数结束,对话窗窗口还存在,树控件还指向imgeList中的图标,就会导致访问已经释放的资源问题。

	/*1、加载图片资源*/HICON img[3];img[0] = AfxGetApp()->LoadIcon(IDR_MAINFRAME);img[1] = AfxGetApp()->LoadIcon(IDR_MAINFRAME);img[2] = AfxGetApp()->LoadIcon(IDR_MAINFRAME);imgeList.Create(30, 30, ILC_COLOR32, 3, 3);for (int i = 0; i < 3; ++i) {imgeList.Add(img[i]);}m_tree.SetImageList(&imgeList, TVSIL_NORMAL);/*2、设置节点、节点图标、节点的父节点*/HTREEITEM root = m_tree.InsertItem(L"根节点", 0, 0, TVI_ROOT);HTREEITEM parent = m_tree.InsertItem(L"父节点", 1, 1, root);HTREEITEM sub1 = m_tree.InsertItem(L"子节点", 2, 2, parent);

 效果如下:

设置默认选中项 

	HTREEITEM root = m_tree.InsertItem(L"根节点", 0, 0, TVI_ROOT);HTREEITEM parent = m_tree.InsertItem(L"父节点", 1, 1, root);HTREEITEM sub1 = m_tree.InsertItem(L"子节点", 2, 2, parent);/*设置默认选中项*/m_tree.SelectItem(sub1);

效果如下:

设置选中项切换响应函数 

 在树控件中,选中项切换对应的响应函数是TVN_SELCHANGED,如下:

我们可以在这个函数中编写需要的代码

涉及接口介绍:

1、AfxGetApp()->LoadIcon()

功能:加载应用程序图标资源(已经通过资源文件导入的资源)

语法:

HICON LoadIcon(UINT nIDResource);

参数 :

  • nIDResource :图标资源ID(如 IDR_MAINFRAME )

返回值 :成功返回图标句柄(HICON),失败返回NULL。

说明 :

  • AfxGetApp() 获取当前应用程序对象指针
  • 从应用程序资源中加载指定ID的图标

2、CImageList::Create()

功能:创建图像列表对象

语法:

BOOL Create(int cx,           // 图像宽度int cy,           // 图像高度UINT nFlags,      // 图像类型标志int nInitial,     // 初始图像数量int nGrow         // 增长数量
);

参数详解 :

-cx :每个图像的宽度(像素)
-cy :每个图像的高度(像素)
-nFlags :图像类型标志,常用值:
  - ILC_COLOR :使用默认行为
  - ILC_COLOR4 :4位(16色)
  - ILC_COLOR8 :8位(256色)
  - ILC_COLOR16 :16位(65536色)
  - ILC_COLOR24 :24位(真彩色)
  - ILC_COLOR32 :32位(真彩色+Alpha通道) //常用
  - ILC_MASK :使用掩码
- nInitial :图像列表的初始容量
- nGrow :当需要更多空间时的增长数量

返回值 :成功返回TRUE,失败返回FALSE。

3、CTreeCtrl::SetImageList()

功能:为树控件设置图像列表

语法:

CImageList* SetImageList(CImageList* pImageList,  // 图像列表指针int nImageListType       // 图像列表类型
);

参数 :

- pImageList :指向CImageList对象的指针
- nImageListType :图像列表类型,常用值:
  - TVSIL_NORMAL :正常状态图像列表  //常用
  - TVSIL_STATE :状态图像列表
返回值 :返回之前设置的图像列表指针。

4、CTreeCtrl::InsertItem()

功能:在树控件中插入新节点

语法:

HTREEITEM InsertItem(LPCTSTR lpszItem,        // 节点文本int nImage,              // 正常状态图像索引int nSelectedImage,      // 选中状态图像索引HTREEITEM hParent,       // 父节点句柄HTREEITEM hInsertAfter   // 插入位置
);// 简化版本
HTREEITEM InsertItem(LPCTSTR lpszItem,        // 节点文本HTREEITEM hParent,       // 父节点句柄HTREEITEM hInsertAfter   // 插入位置
);

参数详解 :

- lpszItem :节点显示的文本字符串
- nImage :节点正常状态时显示的图像索引(对应图像列表中的索引)
- nSelectedImage :节点被选中时显示的图像索引
- hParent :父节点句柄,特殊值:
  - TVI_ROOT :作为根节点插入
  - 其他HTREEITEM:作为指定节点的子节点
- hInsertAfter :插入位置,特殊值:
  - TVI_FIRST :插入为第一个子节点
  - TVI_LAST :插入为最后一个子节点
  - TVI_SORT :按字母顺序插入

http://www.xdnf.cn/news/1044649.html

相关文章:

  • Spring Framework 7.0发布
  • C++问题:纯虚函数和抽象类
  • C语言进阶:深度解剖数据在内存中的存储(浮点型在内存中的存储)
  • 某网站极验4滑块验证码逆向分析
  • vue2中setTimeout中调用methods方法问题
  • BEV 感知算法评价指标简介
  • 安卓9.0系统修改定制化____安卓 9.0系统修改固件 自动开启USB调试教程 开搞篇 六
  • 【Linux】基于策略模式的简单日志设计
  • Spring Boot Web 应用开发
  • 如何用AI绘画工具创作出属于你的拉布布(泡泡玛特)形象?
  • leetcode146-LRU缓存
  • rv1126+opencv多线程同时对视频进行膨胀和腐蚀
  • java 设计模式_行为型_20中介者模式
  • HTML的最基础入门知识,从零开始逐步讲解,适合为后续爬虫技术打基础:
  • Windows下Docker一键部署Dify教程
  • htmlcss考核
  • WebAssembly 2.0:超越浏览器的全栈计算革命
  • 【Zephyr 系列 26】跨平台测试框架设计:CLI + 自动脚本 + OTA 校验一体化方案
  • NVIDIA Isaac GR00T N1.5 人形机器人强化学习入门教程(四)Lerobot、宇树 G1 等不同形态机器人微调教程
  • Spring Boot的Security安全控制——应用SpringSecurity!
  • Java面试题022:一文深入了解微服务网关Gateway
  • 微软azure抢跑aws和谷歌云的区别
  • SpringMVC系列(一)(介绍,简单应用以及路径位置通配符)
  • 使用Nodejs尝试小程序后端服务编写:简单的待办事项管理demo
  • Java EE与Jakarta EE命名空间区别
  • Appium+python自动化(二十三)- Monkeyrunner与Monkey
  • 基于PPSO与BP神经网络回归模型的特征选择实战(Python实现)
  • Node.js 中常用的异步函数讲解、如何检测异步操作时间和事件
  • NodeJS的yarn和npm作用和区别,为什么建议用yarn
  • AWS 解决方案深度剖析:Amazon QLDB — 构建可信赖、不可变的数据审计基石