设置某一行背景颜色的CListCtrl

原创链接

三个接口函数,设置某一行的文字颜色(前景色)和背景色,使用说明都放在注释里了,自己看吧:

LineColorListCtrl.h

[cpp]  view plain copy
  1. #if !defined(AFX_LINECOLORLISTCTRL_H__92EB1CD4_CD33_4E02_A098_367A8FEFF38E__INCLUDED_)  
  2. #define AFX_LINECOLORLISTCTRL_H__92EB1CD4_CD33_4E02_A098_367A8FEFF38E__INCLUDED_  
  3.   
  4. #if _MSC_VER > 1000  
  5. #pragma once  
  6. #endif // _MSC_VER > 1000  
  7. // LineColorListCtrl.h : header file  
  8. //  
  9.   
  10. #include <afxtempl.h>  
  11.   
  12.   
  13. typedef struct    
  14. {  
  15.     COLORREF colText;  
  16.     COLORREF colTextBk;  
  17. }TEXT_BK;  
  18.   
  19. /////////////////////////////////////////////////////////////////////////////  
  20. // CLineColorListCtrl window  
  21.   
  22. class CLineColorListCtrl : public CListCtrl  
  23. {  
  24. public:  
  25.     void SetItemColor(DWORD iItem, COLORREF TextColor, COLORREF TextBkColor);   //设置某一行的前景色和背景色  
  26.     void SetAllItemColor(DWORD iItem, COLORREF TextColor, COLORREF TextBkColor);//设置全部行的前景色和背景色  
  27.     void ClearColor();                                                          //清除颜色映射表  
  28.   
  29. // Construction  
  30. public:  
  31.     CLineColorListCtrl();  
  32.   
  33. // Attributes  
  34. public:  
  35.     CMap<DWORDDWORD&, TEXT_BK, TEXT_BK&> MapItemColor;  
  36.       
  37.   
  38. // Operations  
  39. public:  
  40.   
  41. // Overrides  
  42.     // ClassWizard generated virtual function overrides  
  43.     //{{AFX_VIRTUAL(CLineColorListCtrl)  
  44.     //}}AFX_VIRTUAL  
  45.   
  46. // Implementation  
  47. public:  
  48.     virtual ~CLineColorListCtrl();  
  49.   
  50.     // Generated message map functions  
  51. protected:  
  52.     //{{AFX_MSG(CLineColorListCtrl)  
  53.         // NOTE - the ClassWizard will add and remove member functions here.  
  54.     //}}AFX_MSG  
  55.     void CLineColorListCtrl::OnNMCustomdraw(NMHDR *pNMHDR, LRESULT *pResult);  
  56.   
  57.     DECLARE_MESSAGE_MAP()  
  58. };  
  59.   
  60. /////////////////////////////////////////////////////////////////////////////  
  61.   
  62. //{{AFX_INSERT_LOCATION}}  
  63. // Microsoft Visual C++ will insert additional declarations immediately before the previous line.  
  64.   
  65. #endif // !defined(AFX_LINECOLORLISTCTRL_H__92EB1CD4_CD33_4E02_A098_367A8FEFF38E__INCLUDED_)  

LineColorListCtrl.cpp:

[cpp]  view plain copy
  1. // LineColorListCtrl.cpp : implementation file  
  2. //  
  3.   
  4. #include "../stdafx.h"  
  5. #include "LineColorListCtrl.h"  
  6.   
  7. #ifdef _DEBUG  
  8. #define new DEBUG_NEW  
  9. #undef THIS_FILE  
  10. static char THIS_FILE[] = __FILE__;  
  11. #endif  
  12.   
  13. /////////////////////////////////////////////////////////////////////////////  
  14. // CLineColorListCtrl  
  15.   
  16. CLineColorListCtrl::CLineColorListCtrl()  
  17. {  
  18. }  
  19.   
  20. CLineColorListCtrl::~CLineColorListCtrl()  
  21. {  
  22. }  
  23.   
  24.   
  25. BEGIN_MESSAGE_MAP(CLineColorListCtrl, CListCtrl)  
  26.     //{{AFX_MSG_MAP(CLineColorListCtrl)  
  27.         // NOTE - the ClassWizard will add and remove mapping macros here.  
  28.     //}}AFX_MSG_MAP  
  29.     ON_NOTIFY_REFLECT(NM_CUSTOMDRAW, OnNMCustomdraw)  
  30. END_MESSAGE_MAP()  
  31.   
  32. /////////////////////////////////////////////////////////////////////////////  
  33. // CLineColorListCtrl message handlers  
  34.   
  35.   
  36. void CLineColorListCtrl::OnNMCustomdraw(NMHDR *pNMHDR, LRESULT *pResult)    
  37. {    
  38.     // TODO: Add your control notification handler code here     
  39.     *pResult = CDRF_DODEFAULT;    
  40.     NMLVCUSTOMDRAW * lplvdr=(NMLVCUSTOMDRAW*)pNMHDR;    
  41.     NMCUSTOMDRAW &nmcd = lplvdr->nmcd;    
  42.     switch(lplvdr->nmcd.dwDrawStage)//判断状态     
  43.     {    
  44.     case CDDS_PREPAINT:    
  45.         {    
  46.             *pResult = CDRF_NOTIFYITEMDRAW;    
  47.             break;    
  48.         }    
  49.     case CDDS_ITEMPREPAINT://如果为画ITEM之前就要进行颜色的改变     
  50.         {    
  51.             TEXT_BK tb;  
  52.   
  53.             if(MapItemColor.Lookup(nmcd.dwItemSpec, tb))    
  54.                 // 根据在 SetItemColor(DWORD iItem, COLORREF color) 设置的     
  55.                 // ITEM号和COLORREF 在摸板中查找,然后进行颜色赋值。     
  56.             {    
  57.                 lplvdr->clrText = tb.colText;     
  58.                 lplvdr->clrTextBk = tb.colTextBk;    
  59.                 *pResult = CDRF_DODEFAULT;    
  60.             }    
  61.         }    
  62.         break;    
  63.     }    
  64. }    
  65.   
  66. void CLineColorListCtrl::ClearColor()  
  67. {  
  68.     MapItemColor.RemoveAll();  
  69. }  
  70.   
  71. void CLineColorListCtrl::SetItemColor(DWORD iItem, COLORREF TextColor, COLORREF TextBkColor)  
  72. {    
  73.     TEXT_BK tb;  
  74.     tb.colText = TextColor;  
  75.     tb.colTextBk = TextBkColor;  
  76.   
  77.   
  78.     MapItemColor.SetAt(iItem, tb);//设置某行的颜色。     
  79.     this->RedrawItems(iItem, iItem);//重新染色     
  80.       
  81.     //this->SetCheck(iItem,1);     
  82.     this->SetFocus();    //设置焦点     
  83.     UpdateWindow();    
  84. }    
  85.   
  86.   
  87. void CLineColorListCtrl::SetAllItemColor(DWORD iItem, COLORREF TextColor, COLORREF TextBkColor)    
  88. {    
  89.     //INT_PTR ncount = this->GetItemCount();  
  90.     TEXT_BK tb;  
  91.     tb.colText = TextColor;  
  92.     tb.colTextBk = TextBkColor;  
  93.   
  94.     if(iItem > 0)    
  95.     {    
  96.         for(DWORD numItem = 0; numItem < iItem ;numItem ++)    
  97.         {    
  98.             //iItem = i;     
  99.             MapItemColor.SetAt(numItem, tb);    
  100.             this->RedrawItems(numItem, numItem);    
  101.         }    
  102.     }    
  103.       
  104.     return;    
  105.       
  106. }    

你可能感兴趣的:(设置某一行背景颜色的CListCtrl)