2012-01-11 36 views
6

使用MFC和Visual Studio 2010 C++。我需要一种方法来使CListCtrl的某些单独的行脱颖而出(但我不想使用内置的选择功能来突出显示行)。它可能是行背景的颜色,或字体重量,甚至可能是图像(如果这是高性能的)。MFC:如何更改ListCtrl的单行行的颜色/粗体?

理想情况下,我想知道如何使用股票列表控件做到这一点。但是,如果这是不可能的,那么让我知道使用第三方代码的方式。

UPDATE

这里是我最后使用的代码:

void MyList::OnNMCustomdraw(NMHDR *pNMHDR, LRESULT *pResult) 
{ 
    NMLVCUSTOMDRAW* cd = reinterpret_cast<NMLVCUSTOMDRAW*>(pNMHDR); 

    *pResult = CDRF_DODEFAULT; 

    switch(cd->nmcd.dwDrawStage) 
    { 
     case CDDS_PREPAINT: 
      *pResult = CDRF_NOTIFYITEMDRAW; 
      break; 

     case CDDS_ITEMPREPAINT: 
      { 
       int rowNumber = cd->nmcd.dwItemSpec; 
       bool highlightRow = (bool)GetItemData(rowNumber); 
       if (highlightRow) 
       { 
        COLORREF backgroundColor; 
        backgroundColor = RGB(255, 0, 0); 
        cd->clrTextBk = backgroundColor; 
       } 
      } 
      break; 

     default: 
      break; 
    } 
} 

在我而言,我是不使用的ItemData什么,所以我在其他地方被称为SetItemData一个布尔值指示行是否应该突出显示。

+2

这确实正是我头一点;-)关于'GetItemData(ROWNUMBER)',你不把它在'CD-> nmcd.lItemlParam' – 2012-01-17 20:52:03

+0

@塞尔日 - appTranslator可供选择:好点啊,会保存一个电话。我必须尝试。 – User 2012-01-18 01:36:38

回答

5

这里的关键信息是发送到您的CListCtrl(和一些其他控件)的NM_CUSTOMDRAW消息。它可以让你告诉Windows你想自定义绘制CListCtrl的一部分。这个想法是,该消息可以让你知道应该自定义控件的哪一部分。因为自定义绘制整个CListCtrl只改变一个单元格的文本颜色将完全矫枉过正。

不用担心,您不必自己处理自定义绘图:该消息允许为控件的一个特定行或单元格设置字体和/或文本/背面颜色。

This codeproject article可能是一个很好的起点。

Here is a shorter code example设置CListCtrl中特定行的颜色。

-2

您可以使用下面的代码来更改整个列表背景颜色,但我不确定是否有支持的功能来更改每行的颜色。以下是代码:

YourControl.SetBkColor(RGB(212,208,200)); 

我希望它有帮助。

+1

一切皆有可能。 – 2017-02-02 07:26:08

+0

是的,我现在相信。 – 2017-04-28 23:53:07

-3

这里是我做我的节目, 如果我想强调该行是CIN或COUT或任何其他只是把这个代码的该行上述

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 0x0F); 

的最后部分,即,为0x0F让你改变背景和文本的颜色代码

在将其更改为所需的颜色后,只需在要高亮显示的行的下方插入另一个颜色代码即:

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 0x0C); 

这里是颜色表及其代码

0 = Black  8 = Gray 
    1 = Blue  9 = Light Blue 
    2 = Green  A = Light Green 
    3 = Aqua  B = Light Aqua 
    4 = Red   C = Light Red 
    5 = Purple  D = Light Purple 
    6 = Yellow  E = Light Yellow 
    7 = White  F = Bright White 

一个黑色的背景和蓝色的文字;

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 0x01); 
+0

OP询问如何设置CListControl的行颜色... – 2017-01-30 15:56:43