【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.pswp.cn/news/909599.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/909599.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

跨境卖家警报。抽绳背包版权案立案,TRO在即速排查

近日Shenzhenshi Jingyida Trading Co., LTD委托律所Dewitty And Associates, Chtd.对其热销的抽绳设计多功能运动背包发起跨境版权维权&#xff0c;保护范围涵盖产品外观设计。 案件基本情况&#xff1a; 起诉时间&#xff1a;2025-6-12 案件号&#xff1a;25-cv-06509 原…

Android Activity全面解析:从创建到生命周期的完整指南

Activity作为Android四大组件之一&#xff0c;是构建用户界面的核心单元。笔者通过郭霖著的第一行代码入门安卓&#xff0c;内容基本都取自书中&#xff0c;这篇博客作为笔者的笔记同时精简了一些书中内容分享在csdn中 一、Activity的创建与基础配置 1.1 创建Activity的基本步…

深入理解 Python 的 secrets 模块:打造更安全的随机数生成机制

深入理解 Python 的 secrets 模块&#xff1a;打造更安全的随机数生成机制 在构建涉及用户身份认证、权限管理、加密通信等系统时&#xff0c;开发者最不能忽视的一个问题就是“安全性”。安全问题的核心之一在于“随机性”——尤其是密码、验证码、Token、Session、API Key 的…

CHAPTER 19 Concurrency Models in Python

一、A Bit of Jargon 1、关键术语解析 1.1 并发 (Concurrency) 定义: 并发是指同时处理多个待处理任务的能力&#xff0c;这些任务可以依次或并行&#xff08;如果可能&#xff09;进行&#xff0c;最终每个任务都会成功或失败。 理解: 单核 CPU: 即使是单核 CPU 也可以实…

DCM4CHEE Archive Light 开发环境部署(5)-IDEA集成调试配置

系列文章目录 DCM4CHEE Archive light 开发环境部署(1)-前言DCM4CHEE Archive light 开发环境部署(2)-PostgreSQLDCM4CHEE Archive light 开发环境部署(3)-OpenLDAPDCM4CHEE Archive light 开发环境部署(4)-Wildfly(JBoss)DCM4CHEE Archive light 开发环境部署(5)-IDEA集成…

在rust中执行命令行输出中文乱码解决办法

如果你使用标准的依赖库执行命令中包含中文的话&#xff0c; 就会发现中文乱码&#xff0c;如果你的输出中没有中文&#xff0c;就可以正常输出&#xff0c;因为windows的命令行默认使用的是gbk编码。。。。。 #[tauri::command] pub async fn run_command(command: String) -…

判断当前浏览器卡不卡

方法一&#xff1a;使用 requestAnimationFrame 和时间戳计算平均 FPS let frameCount 0; let lastTime performance.now(); let fps 0; let isSlow false; // 是否卡顿的标志function calculateFPS(currentTime) {frameCount;// 每隔大约 1000 毫秒&#xff08;1秒&#…

51c嵌入式~电路~合集2

我自己的原文哦~ https://blog.51cto.com/whaosoft/11748634 一、延长电子元器件的货架寿命 本文探讨了电子元器件的货架寿命问题&#xff0c;重点讨论了氧化、湿度敏感等级&#xff08;MSL&#xff09;与货架寿命之间的关系。文章通过具体例子说明了氧化对电子元器件可…

Eureka 与 Feign(一)

Eureka 与 Feign 知识解析 1. Eureka Spring Cloud Eureka 是服务发现组件&#xff0c;包含&#xff1a; Eureka Server&#xff1a;注册中心&#xff0c;管理服务实例Eureka Client&#xff1a;服务实例&#xff0c;向注册中心注册/获取服务信息 核心功能&#xff1a; 服…

AN动画软件|Animate 2025百度云下载与安装教程指南

如大家所了解的&#xff0c;‌Animate全称Adobe Animate&#xff0c;常常也被简称为AN。它是一款2D动画制作软件‌&#xff0c;其前身为Flash Professional CC&#xff0c;2016年更名为Animate CC&#xff0c;支持Flash SWF文件及HTML5动画创作&#xff0c;广泛应用于网页交互、…

提示词工程中常见协议框架应用实例

一、生成式诊断催化协议(Generative Diagnosis Catalysis, GDC) 技术原理:基于神经符号系统的因果推理引擎,融合贝叶斯网络与强化学习 实施场景: class DiagnosticCatalyst:def __init__(self, domain="医疗诊断"):self.causal_graph

资深Java工程师的面试题目(七)JDK JVM

以下是针对 Java 面试者 的 JVM 和 JDK 相关题目&#xff0c;涵盖核心知识点、实际应用场景和进阶问题&#xff1a; 一、JVM 基础 1. JVM 内存模型 题目&#xff1a; 请描述 JVM 的内存模型及其组成部分&#xff0c;并说明每个区域的作用。 解析&#xff1a; JVM 内存模型分…

【系统设计【4】】设计一个限流器:从理论到实践的完整解决方案

文章目录 第一步&#xff1a;理解问题并确定设计范围1、为什么需要限流器2、需求澄清的艺术3、需求总结与优先级 第二步&#xff1a;提出高层次设计并获得认同1. 限流器的部署位置选择2. 限流算法的选择与权衡3. 高层架构设计 第三步&#xff1a;深入设计1、限流规则的设计与管…

基于DETR目标检测项目

DETR见解 DETR&#xff08;Detection Transformer&#xff09;是一种端到端的目标检测模型&#xff0c;由Facebook AI Research&#xff08;FAIR&#xff09;于2020年提出。DETR采用了Transformer架构&#xff0c;与传统的基于区域的目标检测方法有所不同&#xff0c;它通过全…

ZooKeeper 集群部署

ZooKeeper 集群部署 前言安装部署资源下载JDK 部署Zookeeper 部署 前言 在 Linux 服务器上部署 Zookeeper 之前&#xff0c;需要先安装 JDK。以下是相关版本及环境信息&#xff1a; JDK 版本 jdk-17_linux-x64_bin.tar.gz Zookeeper 部署的版本 3.5.7 操作系统版本 Red Hat E…

8.TCP Server端实现

1.C/S模型 2.Server 端功能分析 tcp_server.c #include "tcp_server.h" #include "lwip/sockets.h" #include <stdio.h>char ReadBuff[BUFF_SIZE]; /* TCP服务器任务函数 */ void vTcpserver_Task(void) {int sfd, cfd, n, i;struct sockaddr_in…

课设作业图书管理系统

用户注册&#xff0c;登录 播放地址 课设作业图书管理系统_哔哩哔哩_bilibili 对图书进行增删改查 package com.xwr.controller; import com.xwr.entity.Book; import com.xwr.entity.Category; import com.xwr.service.BookService; import com.xwr.service.CategoryServ…

springboot 配置加密

springboot 配置加密 [TOC](springboot 配置加密) 前言一、在配置类赋值之前解密二、修改赋值后加密的配置类 前言 在一些国家项目中经常会要求不能暴露数据库链接和密码, 所以需要对配置文件里面的一些配置进行加密处理。 解决方法有两种&#xff1a;一种是在配置加载后还没给…

【操作系统】macOS软件提示“已损坏,打不开”的解决方案

macOS软件提示“已损坏&#xff0c;打不开”的解决方案 在使用 macOS 系统时&#xff0c;不少用户都遇到过这样的情况&#xff1a;当尝试打开某个应用程序时&#xff0c;系统弹出提示“xxx 已损坏&#xff0c;打不开。您应该将它移到废纸篓”&#xff0c;或者显示“无法打开‘…

数据库系统概论(二十)数据库恢复技术

数据库系统概论&#xff08;二十&#xff09;数据库恢复技术 前言一、事务的基本概念1. 什么是事务&#xff1f;2. 事务的两种"打开方式"2.1 隐式事务2.2 显式事务&#xff1a;自己动手打包操作 3. 事务的四大"铁律3.1 原子性3.2 一致性3.3 隔离性3.4 持久性 4.…