CListCtrl 修改行和單元格的背景色或字體顏色

1. 添加 NM_CUSTOMDRAW 消息及其響應函數 數據庫

 BEGIN_MESSAGE_MAP(DBMonitor, CDialog) 函數

      ON_NOTIFY( NM_CUSTOMDRAW, IDC_LIST_RESULT/*CListCtrl的ID*/, OnCustomdrawListResult ) 字體

 ... ... END_MESSAGE_MAP() .net

 說明: 該類表控件 的 Owner Draw Fixed 屬性值爲 False it

 2. 消息響應函數 ast

void DBMonitor::OnCustomdrawListResult(NMHDR *pNMHDR, LRESULT *pResult) 監控

軟件

      *pResult = CDRF_DODEFAULT; date

       NMLVCUSTOMDRAW * lplvdr = reinterpret_cast(pNMHDR); List

       NMCUSTOMDRAW &nmcd = lplvdr->nmcd;

       switch(lplvdr->nmcd.dwDrawStage)//判斷狀態

       {

            case CDDS_PREPAINT:

            {

                  *pResult = CDRF_NOTIFYITEMDRAW;

                  break;

            }

             case CDDS_ITEMPREPAINT:   //若是爲畫ITEM以前就要進行顏色的改變

             { // 設置指定行的背景顏色, m_mapItemColor爲自定義的顏色集合

                  COLORREF ItemColor;

                  DWORD nIntex = nmcd.dwItemSpec;

                  if(m_mapItemColor.Lookup(nIntex, ItemColor))

                  {

                        lplvdr->clrTextBk = ItemColor; // 設置背景顏色

                  }

                   *pResult = CDRF_NOTIFYSUBITEMDRAW; //關鍵, 將消息細化給重繪 SubItem

             }

             break;

             case CDDS_ITEMPREPAINT | CDDS_SUBITEM: //重繪SubItem

             {

                  COLORREF clrIndicateText = RGB(255,0,0); //提示字段 字體爲紅色

                  COLORREF clrDefaultText = RGB(0,0,0); //其餘字段 字體爲黑色  

                 int nItem = static_cast( lplvdr->nmcd.dwItemSpec );

                 int nSubItem = static_cast(lplvdr->iSubItem);

                 pair point = make_pair(nItem, nSubItem);

                //set< pair > m_setDataDiff; 保存想重點提示的字段

                 if (m_setDataDiff.find(point) != m_setDataDiff.end())

                {

                      lplvdr->clrText = clrIndicateText;

                 }

                else

                 {

                      lplvdr->clrText = clrDefaultText;

                 }

                // Tell Windows to paint the control itself.

                *pResult = CDRF_DODEFAULT;

           }

           default:

                 break;

       }

 }

3. 觸發重繪消息

 // 修改ClistCtrl類的指定行的顏色。

void DBMonitor::RedrawItemColor(int nFirst, int nLast)

{

     m_listResult.RedrawItems(nFirst, nLast);//從新染色

     UpdateWindow();

}

 4. 設置顏色集合 void DBMonitor::SaveColorSet()

{

     CMap<DWORD, DWORD&, COLORREF, COLORREF&> m_mapItemColor; //存儲背景色的CMap

      COLORREF clr[5] = { RGB(255, 164, 255), RGB(177, 174, 244), RGB(170, 247, 249), RGB(245, 250, 169), RGB(249, 205, 170) };

      for (unsigned long i=0; i<10000; )

      {

           for (int j=0; j<2; ++j)

          {

              m_mapItemColor.SetAt( i, clr[j+2]);//設置某行的顏色

              ++i;

              m_mapItemColor.SetAt( i, clr[j+2]);

              ++i;

         }

     }

}

所有代碼已上傳至CSDN: <<數據庫數據變化監控軟件(自制)>> http://download.csdn.net/detail/wendan97/6729057

相關文章
相關標籤/搜索