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

相关文章

如何设置vim永久显示行号

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

Linux:alias如何设置永久生效

《Linux:alias如何设置永久生效》在Linux中设置别名永久生效的步骤包括:在/root/.bashrc文件中配置别名,保存并退出,然后使用source命令(或点命令)使配置立即生效,这样,别... 目录linux:alias设置永久生效步骤保存退出后功能总结Linux:alias设置永久生效步骤

Spring MVC如何设置响应

《SpringMVC如何设置响应》本文介绍了如何在Spring框架中设置响应,并通过不同的注解返回静态页面、HTML片段和JSON数据,此外,还讲解了如何设置响应的状态码和Header... 目录1. 返回静态页面1.1 Spring 默认扫描路径1.2 @RestController2. 返回 html2

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

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

Python实现将实体类列表数据导出到Excel文件

《Python实现将实体类列表数据导出到Excel文件》在数据处理和报告生成中,将实体类的列表数据导出到Excel文件是一项常见任务,Python提供了多种库来实现这一目标,下面就来跟随小编一起学习一... 目录一、环境准备二、定义实体类三、创建实体类列表四、将实体类列表转换为DataFrame五、导出Da

四种简单方法 轻松进入电脑主板 BIOS 或 UEFI 固件设置

《四种简单方法轻松进入电脑主板BIOS或UEFI固件设置》设置BIOS/UEFI是计算机维护和管理中的一项重要任务,它允许用户配置计算机的启动选项、硬件设置和其他关键参数,该怎么进入呢?下面... 随着计算机技术的发展,大多数主流 PC 和笔记本已经从传统 BIOS 转向了 UEFI 固件。很多时候,我们也

Linux中chmod权限设置方式

《Linux中chmod权限设置方式》本文介绍了Linux系统中文件和目录权限的设置方法,包括chmod、chown和chgrp命令的使用,以及权限模式和符号模式的详细说明,通过这些命令,用户可以灵活... 目录设置基本权限命令:chmod1、权限介绍2、chmod命令常见用法和示例3、文件权限详解4、ch

SpringBoot项目引入token设置方式

《SpringBoot项目引入token设置方式》本文详细介绍了JWT(JSONWebToken)的基本概念、结构、应用场景以及工作原理,通过动手实践,展示了如何在SpringBoot项目中实现JWT... 目录一. 先了解熟悉JWT(jsON Web Token)1. JSON Web Token是什么鬼

使用Spring Cache时设置缓存键的注意事项详解

《使用SpringCache时设置缓存键的注意事项详解》在现代的Web应用中,缓存是提高系统性能和响应速度的重要手段之一,Spring框架提供了强大的缓存支持,通过​​@Cacheable​​、​​... 目录引言1. 缓存键的基本概念2. 默认缓存键生成器3. 自定义缓存键3.1 使用​​@Cacheab

Python中列表的高级索引技巧分享

《Python中列表的高级索引技巧分享》列表是Python中最常用的数据结构之一,它允许你存储多个元素,并且可以通过索引来访问这些元素,本文将带你深入了解Python列表的高级索引技巧,希望对... 目录1.基本索引2.切片3.负数索引切片4.步长5.多维列表6.列表解析7.切片赋值8.删除元素9.反转列表