MFC:如何更改ListCtrl的个别行的颜色/粗体?

Use*_*ser 6 mfc row highlighting clistctrl visual-c++

使用MFC和Visual Studio 2010 C++.我需要一种方法来使某些CListCtrl的各行突出(但我不想使用内置的选择功能来突出显示行).它可能是行背景的颜色,或字体粗细,甚至可能是图像(如果是高性能).

理想情况下,我想知道如何使用库存清单控件执行此操作.但是,如果无法做到这一点,请告诉我使用第三方代码的方法.

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

在我的例子中,我没有使用ItemData作为任何东西,因此我在其他地方用一个布尔值调用了SetItemData来指示是否应该突出显示该行.

Ser*_*ier 5

这里的关键信息是发送到CListCtrl(以及其他一些控件)的NM_CUSTOMDRAW消息.它允许您告诉Windows您要自定义绘制CListCtrl的某些部分.我们的想法是,该消息允许您告诉应该自定义绘制控件的哪个部分.因为自定义绘制整个CListCtrl只是为了改变单元格的文本颜色将是完全矫枉过正.

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

这个代码项目文章可能是一个很好的起点.

下面是一个较短的代码示例,用于设置CListCtrl中特定行的颜色.