ListCtrl失去焦点仍然高亮显示并改变单元格颜色

2024-02-25 07:32

本文主要是介绍ListCtrl失去焦点仍然高亮显示并改变单元格颜色,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这里使用VS2010的MFC进行讲解 :

1.找到需要添加的消息的ListControl控件的属性,选择事件里面,选择NM_CUSTOMDRAW事件,程序自动生成方法.

2.在.cpp文件中自动生成的 OnNMCustomdrawList1 方法里面添加代码.

  (1).为List实现失去焦点仍然高亮显示.

void CDlgDacggl::OnNMCustomdrawList1(NMHDR *pNMHDR, LRESULT *pResult)
{NMLVCUSTOMDRAW* pLVCD = reinterpret_cast<NMLVCUSTOMDRAW*>(pNMHDR);*pResult = CDRF_DODEFAULT;if (CDDS_PREPAINT == pLVCD->nmcd.dwDrawStage){*pResult = CDRF_NOTIFYITEMDRAW;}else if (CDDS_ITEMPREPAINT == pLVCD->nmcd.dwDrawStage){*pResult = CDRF_NOTIFYSUBITEMDRAW;}else if ((CDDS_ITEMPREPAINT|CDDS_SUBITEM) == pLVCD->nmcd.dwDrawStage){COLORREF m_clrText2,m_clrBKcolor;int nItem = static_cast<int>(pLVCD->nmcd.dwItemSpec);POSITION pos = m_ctrDacgglList.GetFirstSelectedItemPosition();int index = m_ctrDacgglList.GetNextSelectedItem(pos); //获取鼠标点击的哪一项索引if (nItem == index)    //某一项被选中则显示{m_clrText2 = RGB(255,255,255);m_clrBKcolor = RGB(49,106,197);}else    //其余的默认如下{m_clrText2 = RGB(0,0,0);m_clrBKcolor = RGB(255,255,255);}pLVCD->clrText = m_clrText2;pLVCD->clrTextBk = m_clrBKcolor;}
}

  (2).为List相应的单元格添加字体颜色.

void CDlgDacggl::OnNMCustomdrawList1(NMHDR *pNMHDR, LRESULT *pResult)
{NMLVCUSTOMDRAW* pLVCD = reinterpret_cast<NMLVCUSTOMDRAW*>(pNMHDR);*pResult = CDRF_DODEFAULT;if (CDDS_PREPAINT == pLVCD->nmcd.dwDrawStage){*pResult = CDRF_NOTIFYITEMDRAW;}else if (CDDS_ITEMPREPAINT == pLVCD->nmcd.dwDrawStage){*pResult = CDRF_NOTIFYSUBITEMDRAW;}else if ((CDDS_ITEMPREPAINT|CDDS_SUBITEM) == pLVCD->nmcd.dwDrawStage){COLORREF m_clrText,m_clrBKColor;int nItem = static_cast<int>(pLVCD->nmcd.dwItemSpec);// 判断使ListCtrl不同颜色现实的条件CString str = m_ctrDacgglList.GetItemText(nItem,2); //获取控件第二列的值,m_list为控件的变量if (str == "有" && 2 == pLVCD->iSubItem)    //这里我的第三列单元格里面有一个汉字 "有" 字,若单元格里为 "有" 字,则显示下面的RGB,反之.{//设置该列的颜色m_clrText = RGB(255,127,0);}else if (str == "无" && 2 == pLVCD->iSubItem){m_clrText = RGB(0,139,139);}else    //其他Text默认为RGB(0,0,0){m_clrText = RGB(0,0,0);}pLVCD->clrText = m_clrText;*pResult = CDRF_DODEFAULT;}
}

(3).在List失去焦点后仍然高亮显示,并且改变单元格的文字颜色,还可以在失去焦点后再改变文字颜色.

void CDlgDacggl::OnNMCustomdrawList1(NMHDR *pNMHDR, LRESULT *pResult)
{NMLVCUSTOMDRAW* pLVCD = reinterpret_cast<NMLVCUSTOMDRAW*>(pNMHDR);*pResult = CDRF_DODEFAULT;if (CDDS_PREPAINT == pLVCD->nmcd.dwDrawStage){*pResult = CDRF_NOTIFYITEMDRAW;}else if (CDDS_ITEMPREPAINT == pLVCD->nmcd.dwDrawStage){*pResult = CDRF_NOTIFYSUBITEMDRAW;}else if ((CDDS_ITEMPREPAINT|CDDS_SUBITEM) == pLVCD->nmcd.dwDrawStage){COLORREF m_clrText,m_clrBKColor;int nItem = static_cast<int>(pLVCD->nmcd.dwItemSpec);CString str = m_ctrDacgglList.GetItemText(nItem,2);	//获取控件第二列的值,m_list为控件的变量BOOL bSelect = FALSE;POSITION pos = m_ctrDacgglList.GetFirstSelectedItemPosition();while(pos)    //第二步当选中时,失去焦点高亮显示{int index = m_ctrDacgglList.GetNextSelectedItem(pos);if(index==nItem){bSelect = TRUE;break;}}if (bSelect)    //当失去焦点后再回来改变单元格里字体的颜色{m_clrText = RGB(255,255,255);//"有"是单元格里的字符,2==pLVCD->iSubItem 是等于第三列的索引时if (str == "有" && 2 == pLVCD->iSubItem){//设置该列的颜色m_clrText = RGB(255,127,0);}m_clrBKColor = RGB(51,102,205);}else    //第一步显示这里的代码块{m_clrText = RGB(0,0,0);if (str == "有" && 2 == pLVCD->iSubItem){//设置该列的颜色m_clrText = RGB(255,127,0);}else if (str == "无" && 2 == pLVCD->iSubItem){m_clrText = RGB(0,139,139);}m_clrBKColor = RGB(255,255,255);}pLVCD->clrText = m_clrText;pLVCD->clrTextBk = m_clrBKColor;*pResult = CDRF_DODEFAULT;}
}

  部分参考 : MFC listCtrl选中某一项,LIST失去焦点时,该项仍然显示高亮_字子昂的博客-CSDN博客

而我已经分不清,你是友情,还是错过的爱情。《蒲公英的约定》

这篇关于ListCtrl失去焦点仍然高亮显示并改变单元格颜色的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/744793

相关文章

使用Python和OpenCV库实现实时颜色识别系统

《使用Python和OpenCV库实现实时颜色识别系统》:本文主要介绍使用Python和OpenCV库实现的实时颜色识别系统,这个系统能够通过摄像头捕捉视频流,并在视频中指定区域内识别主要颜色(红... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间详解

OpenCV实现实时颜色检测的示例

《OpenCV实现实时颜色检测的示例》本文主要介绍了OpenCV实现实时颜色检测的示例,通过HSV色彩空间转换和色调范围判断实现红黄绿蓝颜色检测,包含视频捕捉、区域标记、颜色分析等功能,具有一定的参考... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间

苹果macOS 26 Tahoe主题功能大升级:可定制图标/高亮文本/文件夹颜色

《苹果macOS26Tahoe主题功能大升级:可定制图标/高亮文本/文件夹颜色》在整体系统设计方面,macOS26采用了全新的玻璃质感视觉风格,应用于Dock栏、应用图标以及桌面小部件等多个界面... 科技媒体 MACRumors 昨日(6 月 13 日)发布博文,报道称在 macOS 26 Tahoe 中

使用Python实现获取屏幕像素颜色值

《使用Python实现获取屏幕像素颜色值》这篇文章主要为大家详细介绍了如何使用Python实现获取屏幕像素颜色值,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 一、一个小工具,按住F10键,颜色值会跟着显示。完整代码import tkinter as tkimport pyau

RedisTemplate默认序列化方式显示中文乱码的解决

《RedisTemplate默认序列化方式显示中文乱码的解决》本文主要介绍了SpringDataRedis默认使用JdkSerializationRedisSerializer导致数据乱码,文中通过示... 目录1. 问题原因2. 解决方案3. 配置类示例4. 配置说明5. 使用示例6. 验证存储结果7.

idea中project的显示问题及解决

《idea中project的显示问题及解决》:本文主要介绍idea中project的显示问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录idea中project的显示问题清除配置重China编程新生成配置总结idea中project的显示问题新建空的pr

Python实现获取带合并单元格的表格数据

《Python实现获取带合并单元格的表格数据》由于在日常运维中经常出现一些合并单元格的表格,如果要获取数据比较麻烦,所以本文我们就来聊聊如何使用Python实现获取带合并单元格的表格数据吧... 由于在日常运维中经常出现一些合并单元格的表格,如果要获取数据比较麻烦,现将将封装成类,并通过调用list_exc

通过C#获取Excel单元格的数据类型的方法详解

《通过C#获取Excel单元格的数据类型的方法详解》在处理Excel文件时,了解单元格的数据类型有助于我们正确地解析和处理数据,本文将详细介绍如何使用FreeSpire.XLS来获取Excel单元格的... 目录引言环境配置6种常见数据类型C# 读取单元格数据类型引言在处理 Excel 文件时,了解单元格

电脑显示mfc100u.dll丢失怎么办?系统报错mfc90u.dll丢失5种修复方案

《电脑显示mfc100u.dll丢失怎么办?系统报错mfc90u.dll丢失5种修复方案》最近有不少兄弟反映,电脑突然弹出“mfc100u.dll已加载,但找不到入口点”的错误提示,导致一些程序无法正... 在计算机使用过程中,我们经常会遇到一些错误提示,其中最常见的就是“找不到指定的模块”或“缺少某个DL

python+opencv处理颜色之将目标颜色转换实例代码

《python+opencv处理颜色之将目标颜色转换实例代码》OpenCV是一个的跨平台计算机视觉库,可以运行在Linux、Windows和MacOS操作系统上,:本文主要介绍python+ope... 目录下面是代码+ 效果 + 解释转HSV: 关于颜色总是要转HSV的掩膜再标注总结 目标:将红色的部分滤