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

Linux虚拟机不显示IP地址的解决方法(亲测有效)

《Linux虚拟机不显示IP地址的解决方法(亲测有效)》本文主要介绍了通过VMware新装的Linux系统没有IP地址的解决方法,主要步骤包括:关闭虚拟机、打开VM虚拟网络编辑器、还原VMnet8或修... 目录前言步骤0.问题情况1.关闭虚拟机2.China编程打开VM虚拟网络编辑器3.1 方法一:点击还原VM

CSS模拟 html 的 title 属性(鼠标悬浮显示提示文字效果)

《CSS模拟html的title属性(鼠标悬浮显示提示文字效果)》:本文主要介绍了如何使用CSS模拟HTML的title属性,通过鼠标悬浮显示提示文字效果,通过设置`.tipBox`和`.tipBox.tipContent`的样式,实现了提示内容的隐藏和显示,详细内容请阅读本文,希望能对你有所帮助... 效

使用Apache POI在Java中实现Excel单元格的合并

《使用ApachePOI在Java中实现Excel单元格的合并》在日常工作中,Excel是一个不可或缺的工具,尤其是在处理大量数据时,本文将介绍如何使用ApachePOI库在Java中实现Excel... 目录工具类介绍工具类代码调用示例依赖配置总结在日常工作中,Excel 是一个不可或缺的工http://

使用Python合并 Excel单元格指定行列或单元格范围

《使用Python合并Excel单元格指定行列或单元格范围》合并Excel单元格是Excel数据处理和表格设计中的一项常用操作,本文将介绍如何通过Python合并Excel中的指定行列或单... 目录python Excel库安装Python合并Excel 中的指定行Python合并Excel 中的指定列P

如何设置vim永久显示行号

《如何设置vim永久显示行号》在Linux环境下,vim默认不显示行号,这在程序编译出错时定位错误语句非常不便,通过修改vim配置文件vimrc,可以在每次打开vim时永久显示行号... 目录设置vim永久显示行号1.临时显示行号2.永www.chinasem.cn久显示行号总结设置vim永久显示行号在li

C#实现WinForm控件焦点的获取与失去

《C#实现WinForm控件焦点的获取与失去》在一个数据输入表单中,当用户从一个文本框切换到另一个文本框时,需要准确地判断焦点的转移,以便进行数据验证、提示信息显示等操作,本文将探讨Winform控件... 目录前言获取焦点改变TabIndex属性值调用Focus方法失去焦点总结最后前言在一个数据输入表单

电脑显示hdmi无信号怎么办? 电脑显示器无信号的终极解决指南

《电脑显示hdmi无信号怎么办?电脑显示器无信号的终极解决指南》HDMI无信号的问题却让人头疼不已,遇到这种情况该怎么办?针对这种情况,我们可以采取一系列步骤来逐一排查并解决问题,以下是详细的方法... 无论你是试图为笔记本电脑设置多个显示器还是使用外部显示器,都可能会弹出“无HDMI信号”错误。此消息可能

第10章 中断和动态时钟显示

第10章 中断和动态时钟显示 从本章开始,按照书籍的划分,第10章开始就进入保护模式(Protected Mode)部分了,感觉从这里开始难度突然就增加了。 书中介绍了为什么有中断(Interrupt)的设计,中断的几种方式:外部硬件中断、内部中断和软中断。通过中断做了一个会走的时钟和屏幕上输入字符的程序。 我自己理解中断的一些作用: 为了更好的利用处理器的性能。协同快速和慢速设备一起工作

安卓链接正常显示,ios#符被转义%23导致链接访问404

原因分析: url中含有特殊字符 中文未编码 都有可能导致URL转换失败,所以需要对url编码处理  如下: guard let allowUrl = webUrl.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else {return} 后面发现当url中有#号时,会被误伤转义为%23,导致链接无法访问