设置列表控件(ListCtrl)各种颜色

2023-11-01 03:32

本文主要是介绍设置列表控件(ListCtrl)各种颜色,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

源码下载:ListCtrlColor.Zip

公开接口:

[cpp] view plain copy print ?
  1. //设置奇数行背景颜色  
  2. void SetOddItemBkColor(COLORREF color,BOOL bDraw);  
  3. //设置偶数行背景颜色  
  4. void SetEvenItemBkColor(COLORREF color,BOOL bDraw);  
  5. //设置热点行背景颜色  
  6. void SetHoverItemBkColor(COLORREF color,BOOL bDraw);  
  7. //设置选中行背景颜色  
  8. void SetSelectItemBkColor(COLORREF color,BOOL bDraw);  
  9. //设置奇数行文本颜色  
  10. void SetOddItemTextColor(COLORREF color,BOOL bDraw);  
  11. //设置偶数行文本颜色  
  12. void SetEvenItemTextColor(COLORREF color,BOOL bDraw);  
  13. //设置热点行文本颜色  
  14. void SetHoverItemTextColor(COLORREF color,BOOL bDraw);  
  15. //设置选中行文本颜色  
  16. void SetSelectItemTextColor(COLORREF color,BOOL bDraw);  
实现源码:

[cpp] view plain copy print ?
  1. // MyListCtrl.cpp : 实现文件  
  2.   
  3. IMPLEMENT_DYNAMIC(CMyListCtrl, CListCtrl)  
  4.   
  5. CMyListCtrl::CMyListCtrl()  
  6. {  
  7.     m_OddItemBkColor=0xFEF1E3;//奇数行背景颜色  
  8.     m_EvenItemBkColor=0xFFFFFF;//偶数行背景颜色  
  9.     m_HoverItemBkColor=0xFF;//热点行背景颜色  
  10.     m_SelectItemBkColor=GetSysColor(COLOR_HIGHLIGHT);//选中行背景颜色  
  11.     m_OddItemTextColor=GetSysColor(COLOR_BTNTEXT);//奇数行文本颜色  
  12.     m_EvenItemTextColor=GetSysColor(COLOR_BTNTEXT);//偶数行文本颜色  
  13.     m_HoverItemTextColor=GetSysColor(COLOR_HIGHLIGHTTEXT);//热点行文本颜色  
  14.     m_SelectItemTextColor=GetSysColor(COLOR_BTNTEXT);//选中行文本颜色  
  15.     m_nHoverIndex=-1;  
  16.     m_bTracking=FALSE;  
  17. }  
  18.   
  19. CMyListCtrl::~CMyListCtrl()  
  20. {  
  21. }  
  22.   
  23.   
  24. BEGIN_MESSAGE_MAP(CMyListCtrl, CListCtrl)  
  25.     ON_WM_MOUSEMOVE()  
  26.     ON_MESSAGE(WM_MOUSELEAVE,OnMouseLeave)  
  27.     ON_NOTIFY_REFLECT(NM_CUSTOMDRAW, &CMyListCtrl::OnNMCustomdraw)  
  28. END_MESSAGE_MAP()  
  29.   
  30.   
  31.   
  32. // CMyListCtrl 消息处理程序  
  33.   
  34.   
  35. void CMyListCtrl::SetOddItemBkColor(COLORREF color,BOOL bDraw)//设置奇数行背景颜色  
  36. {  
  37.     m_OddItemBkColor=color;  
  38.     if(bDraw)InvalidateRect(NULL);  
  39. }  
  40. void CMyListCtrl::SetEvenItemBkColor(COLORREF color,BOOL bDraw)//设置偶数行背景颜色  
  41. {  
  42.     m_EvenItemBkColor=color;  
  43.     if(bDraw)InvalidateRect(NULL);  
  44. }  
  45. void CMyListCtrl::SetHoverItemBkColor(COLORREF color,BOOL bDraw)//设置热点行背景颜色  
  46. {  
  47.     m_HoverItemBkColor=color;  
  48.     if(bDraw)InvalidateRect(NULL);  
  49. }  
  50. void CMyListCtrl::SetSelectItemBkColor(COLORREF color,BOOL bDraw)//设置选中行背景颜色  
  51. {  
  52.     m_SelectItemBkColor=color;  
  53.     if(bDraw)InvalidateRect(NULL);  
  54. }  
  55. void CMyListCtrl::SetOddItemTextColor(COLORREF color,BOOL bDraw)//设置奇数行文本颜色  
  56. {  
  57.     m_OddItemTextColor=color;  
  58.     if(bDraw)InvalidateRect(NULL);  
  59. }  
  60. void CMyListCtrl::SetEvenItemTextColor(COLORREF color,BOOL bDraw)//设置偶数行文本颜色  
  61. {  
  62.     m_EvenItemTextColor=color;  
  63.     if(bDraw)InvalidateRect(NULL);  
  64. }  
  65. void CMyListCtrl::SetHoverItemTextColor(COLORREF color,BOOL bDraw)//设置热点行文本颜色  
  66. {  
  67.     m_HoverItemTextColor=color;  
  68.     if(bDraw)InvalidateRect(NULL);  
  69. }  
  70. void CMyListCtrl::SetSelectItemTextColor(COLORREF color,BOOL bDraw)//设置选中行文本颜色  
  71. {  
  72.     m_SelectItemTextColor=color;  
  73.     if(bDraw)InvalidateRect(NULL);  
  74. }  
  75.   
  76.   
  77. void CMyListCtrl::OnMouseMove(UINT nFlags, CPoint point)  
  78. {  
  79.     int nIndex=HitTest(point);  
  80.     if(nIndex!=m_nHoverIndex){  
  81.         int nOldIndex=m_nHoverIndex;  
  82.         m_nHoverIndex=nIndex;  
  83.         CRect rc;  
  84.         if(nOldIndex!=-1){  
  85.             GetItemRect(nOldIndex,&rc,LVIR_BOUNDS);  
  86.             InvalidateRect(&rc);  
  87.         }         
  88.         if(m_nHoverIndex!=-1){  
  89.             GetItemRect(m_nHoverIndex,&rc,LVIR_BOUNDS);  
  90.             InvalidateRect(&rc);  
  91.         }  
  92.     }  
  93.     //=====================================================  
  94.     if(!m_bTracking)   
  95.     {   
  96.         TRACKMOUSEEVENT   tme;   
  97.         tme.cbSize   =   sizeof(tme);   
  98.         tme.hwndTrack   =   m_hWnd;   
  99.         tme.dwFlags   =   TME_LEAVE;//   |   TME_HOVER;   
  100.         tme.dwHoverTime   =   1;   
  101.         m_bTracking   =   _TrackMouseEvent(&tme);   
  102.     }   
  103.     CListCtrl::OnMouseMove(nFlags, point);  
  104. }  
  105. LRESULT CMyListCtrl::OnMouseLeave(WPARAM wParam, LPARAM lParam)  
  106. {  
  107.     m_bTracking=FALSE;  
  108.       
  109.     if(m_nHoverIndex!=-1){  
  110.         CRect rc;  
  111.         GetItemRect(m_nHoverIndex,&rc,LVIR_BOUNDS);  
  112.         m_nHoverIndex=-1;  
  113.         InvalidateRect(&rc);  
  114.     }  
  115.     return 0;  
  116. }  
  117. void CMyListCtrl::OnNMCustomdraw(NMHDR *pNMHDR, LRESULT *pResult)  
  118. {  
  119.     LPNMLVCUSTOMDRAW pNMCD = reinterpret_cast<LPNMLVCUSTOMDRAW>(pNMHDR);  
  120.     *pResult = 0;  
  121.     int nItemIndex=pNMCD->nmcd.dwItemSpec;  
  122.     if (pNMCD->nmcd.dwDrawStage==CDDS_PREPAINT){  
  123.         *pResult = CDRF_NOTIFYITEMDRAW;  
  124.     }else{  
  125.         if(nItemIndex==m_nHoverIndex){ //热点行  
  126.             pNMCD->clrTextBk=m_HoverItemBkColor;  
  127.             pNMCD->clrText=m_HoverItemTextColor;  
  128.         }else if(GetItemState(nItemIndex,LVIS_SELECTED) == LVIS_SELECTED){ //选中行  
  129.             pNMCD->clrTextBk=m_SelectItemBkColor;  
  130.             pNMCD->clrText=pNMCD->clrFace=m_SelectItemTextColor;  
  131.             ::SetTextColor(pNMCD->nmcd.hdc,m_SelectItemTextColor);  
  132.         }else if(nItemIndex % 2==0){//偶数行 比如 0、2、4、6  
  133.             pNMCD->clrTextBk=m_EvenItemBkColor;  
  134.             pNMCD->clrText=m_EvenItemTextColor;  
  135.         }else{  //奇数行 比如 1、3、5、7  
  136.             pNMCD->clrTextBk=m_OddItemBkColor;  
  137.             pNMCD->clrText=m_OddItemTextColor;  
  138.         }  
  139.         *pResult = CDRF_NEWFONT;  
  140.     }  
  141. }  

这篇关于设置列表控件(ListCtrl)各种颜色的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

python设置环境变量路径实现过程

《python设置环境变量路径实现过程》本文介绍设置Python路径的多种方法:临时设置(Windows用`set`,Linux/macOS用`export`)、永久设置(系统属性或shell配置文件... 目录设置python路径的方法临时设置环境变量(适用于当前会话)永久设置环境变量(Windows系统

python中列表应用和扩展性实用详解

《python中列表应用和扩展性实用详解》文章介绍了Python列表的核心特性:有序数据集合,用[]定义,元素类型可不同,支持迭代、循环、切片,可执行增删改查、排序、推导式及嵌套操作,是常用的数据处理... 目录1、列表定义2、格式3、列表是可迭代对象4、列表的常见操作总结1、列表定义是处理一组有序项目的

C++11范围for初始化列表auto decltype详解

《C++11范围for初始化列表autodecltype详解》C++11引入auto类型推导、decltype类型推断、统一列表初始化、范围for循环及智能指针,提升代码简洁性、类型安全与资源管理效... 目录C++11新特性1. 自动类型推导auto1.1 基本语法2. decltype3. 列表初始化3

Go语言编译环境设置教程

《Go语言编译环境设置教程》Go语言支持高并发(goroutine)、自动垃圾回收,编译为跨平台二进制文件,云原生兼容且社区活跃,开发便捷,内置测试与vet工具辅助检测错误,依赖模块化管理,提升开发效... 目录Go语言优势下载 Go  配置编译环境配置 GOPROXYIDE 设置(VS Code)一些基本

小白也能轻松上手! 路由器设置优化指南

《小白也能轻松上手!路由器设置优化指南》在日常生活中,我们常常会遇到WiFi网速慢的问题,这主要受到三个方面的影响,首要原因是WiFi产品的配置优化不合理,其次是硬件性能的不足,以及宽带线路本身的质... 在数字化时代,网络已成为生活必需品,追剧、游戏、办公、学习都离不开稳定高速的网络。但很多人面对新路由器

Python中将嵌套列表扁平化的多种实现方法

《Python中将嵌套列表扁平化的多种实现方法》在Python编程中,我们常常会遇到需要将嵌套列表(即列表中包含列表)转换为一个一维的扁平列表的需求,本文将给大家介绍了多种实现这一目标的方法,需要的朋... 目录python中将嵌套列表扁平化的方法技术背景实现步骤1. 使用嵌套列表推导式2. 使用itert

在Linux中改变echo输出颜色的实现方法

《在Linux中改变echo输出颜色的实现方法》在Linux系统的命令行环境下,为了使输出信息更加清晰、突出,便于用户快速识别和区分不同类型的信息,常常需要改变echo命令的输出颜色,所以本文给大家介... 目python录在linux中改变echo输出颜色的方法技术背景实现步骤使用ANSI转义码使用tpu

linux hostname设置全过程

《linuxhostname设置全过程》:本文主要介绍linuxhostname设置全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录查询hostname设置步骤其它相关点hostid/etc/hostsEDChina编程A工具license破解注意事项总结以RHE

Python设置Cookie永不超时的详细指南

《Python设置Cookie永不超时的详细指南》Cookie是一种存储在用户浏览器中的小型数据片段,用于记录用户的登录状态、偏好设置等信息,下面小编就来和大家详细讲讲Python如何设置Cookie... 目录一、Cookie的作用与重要性二、Cookie过期的原因三、实现Cookie永不超时的方法(一)

Qt 设置软件版本信息的实现

《Qt设置软件版本信息的实现》本文介绍了Qt项目中设置版本信息的三种常用方法,包括.pro文件和version.rc配置、CMakeLists.txt与version.h.in结合,具有一定的参考... 目录在运行程序期间设置版本信息可以参考VS在 QT 中设置软件版本信息的几种方法方法一:通过 .pro