如何根据listview中的值更改某些单元格的颜色

如何根据listview中的值更改某些单元格的颜色,listview,winapi,colorize,Listview,Winapi,Colorize,我已经用C创建了一个列表视图。单元格的颜色应该根据输入的值进行更改。我已经在使用下面的代码,但是它改变了整行,既不是单元格本身,也不是基于它的值 case NM_CUSTOMDRAW: { NMLVCUSTOMDRAW* plvCstDrawPtr = reinterpret_cast<NMLVCUSTOMDRAW*>(nmheader); if( plvCstDr

我已经用C创建了一个列表视图。单元格的颜色应该根据输入的值进行更改。我已经在使用下面的代码,但是它改变了整行,既不是单元格本身,也不是基于它的值

case NM_CUSTOMDRAW:
                 {
                     NMLVCUSTOMDRAW* plvCstDrawPtr = reinterpret_cast<NMLVCUSTOMDRAW*>(nmheader);

                     if( plvCstDrawPtr->nmcd.dwDrawStage == CDDS_PREPAINT )
                     {
                         return CDRF_NOTIFYITEMDRAW;
                     }
                     else if( plvCstDrawPtr->nmcd.dwDrawStage == CDDS_ITEMPREPAINT )
                     {
                         if( plvCstDrawPtr->nmcd.dwItemSpec & 1 )
                         {
                             plvCstDrawPtr->clrTextBk = RGB( 255, 0, 0);
                         }
                     }
                     break;
                 }

我需要一个代码来根据值而不是索引更改颜色。

使用LVM_GETITEM获取值。如果listview是所有者数据,则需要查找用于填充listview的内容。祝你好运我可以得到这个值,我想根据这个值给单元格上色,我不知道你的困惑在哪里。你有这个值,你有给文本上色的代码;把两者放在一起,我想给一个特定的单元格上色,而不是整行。上面显示的代码使包含行中所有单元格的行变为红色。您没有处理与CDDS_子项相关的绘图阶段。CDDS_PREPAINT需要返回CDRF_NOTIFYITEMDRAW以便接收CDDS_ITEMPREPAINT,然后需要返回CDRF_NOTIFYSUBITEMDRAW以便接收CDDS_SUBITEM | CDDS_ITEMPREPAINT。阅读文档: