2010-02-17 18 views
4

我有3個色彩的列表視圖。前兩列有值,第三列有空。我想知道,我如何在第三欄中插入彩色文本?我不想對整行進行着色,只需要更改顏色的第三列。如何在一個ListView中插入彩色文本?

在此先感謝!

kampi

回答

0

@Richard Harrison在使用NM_CUSTOMDRAW時有正確的做法。

而不是重新實現所需的功能,儘管您應該考慮使用免費提供的CListView派生類型之一。

Here is a project我認爲會滿足您的需求。

+0

非常感謝!這是我需要的。再次感謝! – kampi 2010-02-18 17:52:16

5

您可以用CustomDraw處理程序做到這一點,參考:MSDN Developing Custom Draw Controls in Visual C++

基本上它是一個很簡單的(和MSDN相當長的),但它歸結爲以下幾點:

添加其中的一個通常的地方:

 
ON_NOTIFY_REFLECT(NM_CUSTOMDRAW, OnCustomDraw) 

則此方法添加到類。

 
void CMyListView::OnCustomDraw(NMHDR* nmhdr, LRESULT* result) 
{ 
    LPNMLVCUSTOMDRAW vcd = (LPNMLVCUSTOMDRAW)nmhdr; 

    switch(vcd->nmcd.dwDrawStage) 
    { 
     case CDDS_PREPAINT : 
     { 
      *result = CDRF_NOTIFYITEMDRAW; 
      break; 
     } 

     case CDDS_ITEMPREPAINT: 
     { 
      vcd->clrText = RGB(255,0,255); //change the colour of the second row. 
      *result = CDRF_NOTIFYSUBITEMDRAW; 
      break; 
     } 
     default: 
      *result = 0; 
      break; 
    } 
    return; 
} 
+0

嗨!在此期間,我發現與您的代碼非常相似。但我的問題是,你的代碼是每隔一行着色,我發現着色整列。我如何在給定的行和行中檢查我的listview的值是多少?這很重要,因爲我想根據文字的內容對文字進行着色。謝謝! – kampi 2010-02-17 20:13:56