设置列表控件(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

相关文章

Feign Client超时时间设置不生效的解决方法

《FeignClient超时时间设置不生效的解决方法》这篇文章主要为大家详细介绍了FeignClient超时时间设置不生效的原因与解决方法,具有一定的的参考价值,希望对大家有一定的帮助... 在使用Feign Client时,可以通过两种方式来设置超时时间:1.针对整个Feign Client设置超时时间

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

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

PyCharm如何设置新建文件默认为LF换行符

《PyCharm如何设置新建文件默认为LF换行符》:本文主要介绍PyCharm如何设置新建文件默认为LF换行符问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录PyCharm设置新建文件默认为LF换行符设置换行符修改换行符总结PyCharm设置新建文件默认为LF

Linux上设置Ollama服务配置(常用环境变量)

《Linux上设置Ollama服务配置(常用环境变量)》本文主要介绍了Linux上设置Ollama服务配置(常用环境变量),Ollama提供了多种环境变量供配置,如调试模式、模型目录等,下面就来介绍一... 目录在 linux 上设置环境变量配置 OllamPOgxSRJfa手动安装安装特定版本查看日志在

Python中DataFrame转列表的最全指南

《Python中DataFrame转列表的最全指南》在Python数据分析中,Pandas的DataFrame是最常用的数据结构之一,本文将为你详解5种主流DataFrame转换为列表的方法,大家可以... 目录引言一、基础转换方法解析1. tolist()直接转换法2. values.tolist()矩阵

Android App安装列表获取方法(实践方案)

《AndroidApp安装列表获取方法(实践方案)》文章介绍了Android11及以上版本获取应用列表的方案调整,包括权限配置、白名单配置和action配置三种方式,并提供了相应的Java和Kotl... 目录前言实现方案         方案概述一、 androidManifest 三种配置方式

python展开嵌套列表的多种方法

《python展开嵌套列表的多种方法》本文主要介绍了python展开嵌套列表的多种方法,包括for循环、列表推导式和sum函数三种方法,具有一定的参考价值,感兴趣的可以了解一下... 目录一、嵌套列表格式二、嵌套列表展开方法(一)for循环(1)for循环+append()(2)for循环+pyPhWiFd

Python容器类型之列表/字典/元组/集合方式

《Python容器类型之列表/字典/元组/集合方式》:本文主要介绍Python容器类型之列表/字典/元组/集合方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 列表(List) - 有序可变序列1.1 基本特性1.2 核心操作1.3 应用场景2. 字典(D

Ubuntu中Nginx虚拟主机设置的项目实践

《Ubuntu中Nginx虚拟主机设置的项目实践》通过配置虚拟主机,可以在同一台服务器上运行多个独立的网站,本文主要介绍了Ubuntu中Nginx虚拟主机设置的项目实践,具有一定的参考价值,感兴趣的可... 目录简介安装 Nginx创建虚拟主机1. 创建网站目录2. 创建默认索引文件3. 配置 Nginx4

Java中数组转换为列表的两种实现方式(超简单)

《Java中数组转换为列表的两种实现方式(超简单)》本文介绍了在Java中将数组转换为列表的两种常见方法使用Arrays.asList和Java8的StreamAPI,Arrays.asList方法简... 目录1. 使用Java Collections框架(Arrays.asList)1.1 示例代码1.