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

【MFC】设置CTreeCtrl单个节点的文字颜色

问题
功能调整需要依据不同状态设置树控件中单个节点的文字颜色。

分析
1、CTreeCtrl本身有设置文字颜色的接口SetTextColor,但是这个接口是设置树控件整体的文字颜色。
2、在自定义接口可以对树控件单个节点进行更新文字颜色和背景颜色,接收自定义绘制消息NM_CUSTOMDRAW

解决
1、头文件中定义自定义绘制接口

// .h 文件
//...
// 定义自定义绘制接口
afx_msg void OnNMCustomdrawTree(NMHDR *pNMHDR, LRESULT *pResult);//...
// 定义树控件变量
CTreeCtrl                       m_treeList;

2、cpp文件中接收消息并实现接口

// .cpp 文件// 接收消息
BEGIN_MESSAGE_MAP(ModelTreeDlg, CDialogEx)//...ON_NOTIFY(NM_CUSTOMDRAW, IDC_TREE_MODEL, &OnNMCustomdrawTreeModel)	
END_MESSAGE_MAP()// 实现接口
void OnNMCustomdrawTreeModel(NMHDR* pNMHDR, LRESULT* pResult)
{NMLVCUSTOMDRAW* pLVCD = reinterpret_cast<NMLVCUSTOMDRAW*>(pNMHDR);if (NULL == pLVCD)return;*pResult = CDRF_DODEFAULT;*pResult |= CDRF_NOTIFYITEMDRAW;*pResult |= CDRF_NOTIFYSUBITEMDRAW;*pResult |= CDRF_NOTIFYPOSTPAINT;const DWORD dwDrawStage = pLVCD->nmcd.dwDrawStage;if (dwDrawStage != CDDS_ITEMPOSTPAINT || tree.m_bScolling)return;// 获取树控件范围CRect treeRect;m_treeList.GetClientRect(treeRect);//界面重绘,树节点后添加图标HTREEITEM hItem = (HTREEITEM)pLVCD->nmcd.dwItemSpec;CRect textRect;if(tree.GetItemRect(hItem, &textRect, TRUE) == false)return;//获取节点的文本文字CString txt = tree.GetItemText(hItem);CDC* pdc = CDC::FromHandle(pLVCD->nmcd.hdc);// 设置背景颜色pdc->FillSolidRect(&textRect, GetSysColor(COLOR_WINDOW));// 设置文字颜色,默认黑色,依据实体状态更新COLORREF color = RGB(255, 255, 255);color = GetSysColor(COLOR_WINDOWTEXT);pdc->SetTextColor(color);// 一定要调用 不然不会更新颜色显示pdc->TextOut(textRect.left + 2, textRect.top + 2, txt);
}

3、搞定!效果如下:
在这里插入图片描述

相关文章:

【MFC】设置CTreeCtrl单个节点的文字颜色

问题 功能调整需要依据不同状态设置树控件中单个节点的文字颜色。 分析 1、CTreeCtrl本身有设置文字颜色的接口SetTextColor&#xff0c;但是这个接口是设置树控件整体的文字颜色。 2、在自定义接口可以对树控件单个节点进行更新文字颜色和背景颜色&#xff0c;接收自定义绘制…...

【CSS】设置滚动条样式

文章目录 基本语法用法案例 基本语法 在CSS中&#xff0c;可以使用 ::-webkit-scrollbar 和相关伪元素来为滚动条设置样式&#xff0c;但请注意这些伪元素是非标准的&#xff0c;主要用于WebKit内核浏览器&#xff08;如Chrome、Safari&#xff09;。 ::-webkit-scrollbar CSS …...

Gitlab-Runner配置

原理 Gitlab-Runner是一个非常强大的CI/CD工具。它可以帮助我们自动化执行各种任务&#xff0c;如构建、测试和部署等。Gitlab-Runner和Gitlab通过API通信&#xff0c;接收作业并提交到执行队列&#xff0c;Gitlab-Runner从队列中获取作业&#xff0c;并允许在不同环境下进行作…...

代码随想录 哈希 test 8

18. 四数之和 - 力扣&#xff08;LeetCode&#xff09; 与三数之和类似&#xff0c;重点在剪枝和去重的区别&#xff0c;由于target可正可负&#xff0c;因此需要分两种情况讨论&#xff0c;如果target为正&#xff0c;则若当前选择的元素之和大于target&#xff0c;需要跳出这…...

[SAP ABAP] 使用LOOP AT...ASSIGNING FIELD-SYMBOL 直接更新内表数据

使用 LOOP AT...ASSIGNING FIELD-SYMBOL... 可以直接修改内表中的数据&#xff0c;而不需要先将内表数据复制到相应的工作区&#xff0c;然后再更新回内表中&#xff0c;从而提高性能 针对上述代码进行优化&#xff0c;我们使用LOOP AT...ASSIGNING FIELD-SYMBOL 直接更新内表数…...

MySQL数据导出导入

一、数据导出 1.导出全库备份到本地的目录 mysqldump -u$USER -p$PASSWD -h127.0.0.1 -P3306 --routines--default-character-setutf8 --lock-all-tables --add-drop-database -A >db.all.sql 2.导出指定库到本地的目录(例如mysql库) mysqldump -u$USER -p$PASSWD -h127.…...

leetcode 127. 单词接龙

题目&#xff1a;127. 单词接龙 - 力扣&#xff08;LeetCode&#xff09; 先建立一颗trie树&#xff0c;从beginWord开始bfs&#xff1b;bfs的过程中&#xff0c;对trie树进行dfs寻找“只差一个字母”的其他未遍历到的字符串&#xff1b;直到bfs遍历到endWord。 struct Node …...

如何开发一个支持海量分布式锁的应用库

分布式锁是一种用于控制分布式系统中资源访问的同步机制&#xff0c;确保在任意时刻只有一个客户端能够获取到锁&#xff0c;并对共享资源进行操作。 作用 1.保证数据一致性&#xff1a;在多个节点并发执行的情况下&#xff0c;分布式锁可以防止同时修改同一份数据&#xff0c…...

JavaScript系列(17)--类型系统模拟

JavaScript类型系统模拟 &#x1f3ad; 今天&#xff0c;让我们深入探讨JavaScript中的类型系统模拟。虽然JavaScript是一门动态类型语言&#xff0c;但我们可以通过各种方式来实现类型检查和验证。 类型系统基础 &#x1f31f; &#x1f4a1; 小知识&#xff1a;JavaScript是…...

openssl编译

关于windows下&#xff0c;openssl编译 环境准备 安装 perl:https://djvniu.jb51.net/200906/tools/ActivePerl5_64.rar安装nasm&#xff1a;https://www.nasm.us/pub/nasm/releasebuilds/2.13.01/win64/nasm-2.13.01-installer-x64.exe下载opensll源码&#xff1a;https://o…...

校园网络综合布线系统设计与实践

校园网络综合布线系统设计与实践 摘要&#xff1a;随着信息时代的发展&#xff0c;网络综合布线显得更加重要。综合布线技术也日益引起人的重视。综合布线管理系统是一个实用性十分强的系统工程&#xff0c;同样又是现代社区信息化建设的基础与必要产品&#xff0c;是对多用途…...

如果商品信息更新,爬虫会失效吗?

当商品信息更新时&#xff0c;爬虫是否失效取决于更新的具体内容。以下是一些可能影响爬虫的因素&#xff1a; 可能导致爬虫失效的情况 HTML结构变化&#xff1a;如果 yiwugo 平台更新了商品详情页面的 HTML 结构&#xff0c;比如改变了元素的标签、类名或 ID&#xff0c;那么…...

【UE5 C++课程系列笔记】27——多线程基础——ControlFlow插件的基本使用

目录 步骤 一、搭建基本同步框架 二、添加委托 三、添加蓝图互动框架 四、修改为异步框架 完整代码 通过一个游戏初始化流程的示例来介绍“ControlFlows”的基本使用。 步骤 一、搭建基本同步框架 1. 勾选“ControlFlows”插件 2. 新建一个空白C类&#xff0c;这里…...

有收到腾讯委托律师事务所向AppStore投诉带有【水印相机】主标题名称App的开发者吗

近期&#xff0c;有多名开发者反馈&#xff0c;收到来自腾讯科技 (深圳) 有限公司委托北京的一家**诚律师事务所卞&#xff0c;写给AppStore的投诉邮件。 邮件内容主要说的是&#xff0c;腾讯注册了【水印相机】这四个字的商标&#xff0c;所以你们这些在AppStore上的app&…...

标定 3

标定场景与对应的方式 标定板标定主要应用场景: (1)无法获取到执行机构物理坐标值,比如相机固定,执行机构为传送带等 (2)相机存在畸变等非线性标定情况,需要进行畸变校正 (3)标定单像素精度 (4)获取两个相机之间的坐标系关系 标定板操作步骤: (1)确定好拍…...

用 C# 绘制谢尔宾斯基垫片

谢尔宾斯基垫片是一个三角形&#xff0c;分解成多个小三角形&#xff0c;如右图所示。有几种方法可以生成这种垫片。这里展示的方法是其中一种比较令人惊讶的方法。 程序从三个点开始&#xff08;图中圆圈所示&#xff09;。“当前位置”从其中一个点开始。为了生成后续点&…...

java.lang.NoClassDefFoundError: javax/xml/bind/DatatypeConverter

今天在朋友机子上运行代码&#xff0c;在生成token的时候&#xff0c;遇到了这样一个问题&#xff1a; Caused by: java.lang.NoClassDefFoundError: javax/xml/bind/DatatypeConverter at io.jsonwebtoken.impl.Base64Codec.decode(Base64Codec.java:26) ~[jjwt-0.9.1.jar:0.…...

双因素身份验证技术在NPI区域邮件安全管控上的解决思路

在制造业中&#xff0c;NPI&#xff08;New Product Introduction&#xff0c;新产品导入&#xff09;区域是指专门负责新产品从概念到市场推出全过程的部门或团队。NPI 的目标是确保新产品能够高效、高质量地投入生产&#xff0c;并顺利满足市场需求。在支撑企业持续创新和竞争…...

java后端对接飞书登陆

java后端对接飞书登陆 项目要求对接第三方登陆&#xff0c;飞书登陆&#xff0c;次笔记仅针对java后端&#xff0c;在看本笔记前&#xff0c;默认已在飞书开发方已建立了应用&#xff0c;并获取到了appid和appsecret。后端要做的其实很简单&#xff0c;基本都是前端做的&…...

记录一次Android Studio的下载、安装、配置

目录 一、下载和安装 Android Studio 1、搜索下载Android studio ​2、下载成功后点击安装包进行安装&#xff1a; 3、这里不用打勾&#xff0c;直接点击安装 &#xff1a; 4、完成安装&#xff1a; 5、这里点击Cancel就可以了 6、接下来 7、点击自定义安装&#xff1a…...

UE5运行时动态调整游戏视口:解决UI遮挡导致物体位置偏移的实战方案

UE5运行时动态调整游戏视口&#xff1a;解决UI遮挡导致物体位置偏移的实战方案 当你在UE5项目中设计了一个精美的HUD界面&#xff0c;却发现那些半透明的UI元素正在悄悄改变游戏世界的坐标规则——原本应该出现在屏幕中心的角色突然偏离了位置。这不是视觉错觉&#xff0c;而是…...

科梁信息冲刺港股:年营收6亿 利润9303万 桑苏明控制41%股权

雷递网 雷建平 5月20日上海科梁信息科技股份有限公司&#xff08;简称&#xff1a;“科梁信息”&#xff09;日前递交招股书&#xff0c;准备在港交所上市。年营收6亿 利润9303万科梁信息成立于2007年&#xff0c;是一家数字能源科技公司&#xff0c;致力于为新型电力系统与高端…...

COMSOL电磁超声仿真避坑指南:从‘域不适用’报错到结果收敛的完整调试流程

COMSOL电磁超声仿真避坑指南&#xff1a;从‘域不适用’报错到结果收敛的完整调试流程 电磁超声仿真作为多物理场耦合的典型应用场景&#xff0c;其复杂性往往让即使有一定COMSOL基础的用户也频频"踩坑"。当你在深夜盯着屏幕上鲜红的"域不适用"报错&#x…...

手把手教你用BES AUDIO_DUMP抓取蓝牙耳机通话AEC前后音频(附AU播放教程)

蓝牙耳机AEC算法调试实战&#xff1a;从数据抓取到效果验证全流程 在嵌入式音频开发领域&#xff0c;通话降噪&#xff08;AEC&#xff09;算法的效果验证一直是工程师面临的痛点。传统调试方法往往依赖主观听感或简单波形对比&#xff0c;难以精准定位问题。本文将基于BES2500…...

用Python和Matplotlib搞定高光谱图像可视化:从.mat文件到伪彩色图(附完整代码)

PythonMatplotlib高光谱图像可视化实战&#xff1a;从.mat文件到伪彩色合成 高光谱图像处理正逐渐从专业遥感领域走向更广泛的工业应用场景。当一位农业科技公司的算法工程师第一次拿到作物生长监测的高光谱数据时&#xff0c;面对.mat格式文件中那个神秘的三维矩阵&#xff0c…...

OmenSuperHub终极指南:3步解锁暗影精灵完整性能潜力

OmenSuperHub终极指南&#xff1a;3步解锁暗影精灵完整性能潜力 【免费下载链接】OmenSuperHub 使用 WMI BIOS控制性能和风扇速度&#xff0c;自动解除DB功耗限制。 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub 想要彻底掌控惠普暗影精灵笔记本的性能吗&…...

2026年数字人拍摄新方式:一条视频能省多少时间

2026年数字人拍摄新方式&#xff1a;一条视频能省多少时间 【导语】 做视频最耗时间的是什么&#xff1f;不是拍摄那几分钟&#xff0c;而是前期的准备工作。但现在有一种新方式&#xff0c;可以让你完全不用拍摄真人&#xff0c;一条视频从准备到成片&#xff0c;最快只要7分钟…...

MifareOneTool完全指南:零基础掌握Windows最强NFC卡片管理工具

MifareOneTool完全指南&#xff1a;零基础掌握Windows最强NFC卡片管理工具 【免费下载链接】MifareOneTool A GUI Mifare Classic tool on Windows&#xff08;停工/最新版v1.7.0&#xff09; 项目地址: https://gitcode.com/gh_mirrors/mi/MifareOneTool 你是否曾经面对…...

别再死循环了!手把手教你用Python实现D*算法(附完整代码与避坑指南)

从理论到实践&#xff1a;Python实现D*算法的工程化指南与避坑策略 路径规划中的动态适应挑战 在机器人导航和游戏AI开发中&#xff0c;路径规划算法扮演着至关重要的角色。传统算法如A*和Dijkstra虽然能有效解决静态环境下的路径规划问题&#xff0c;但在动态变化的环境中却显…...

别再焊错线了!51单片机+L298N驱动小车底盘,保姆级接线避坑指南

51单片机L298N驱动小车底盘&#xff1a;从零避坑到一次点亮 当你第一次把51单片机、L298N电机驱动模块、红外传感器和电源组装在一起时&#xff0c;是否曾被那些密密麻麻的杜邦线弄得晕头转向&#xff1f;每个初学者都可能经历过接错线导致芯片冒烟的惨痛教训。本文将用实战经验…...