使用 MFC 和 Visual Studio 2010 C++。我需要一种方法来突出 CListCtrl 的某些单独的行(但是我不想使用内置的选择功能来突出显示这些行)。它可能是行背景的颜色,或字体粗细,甚至可能是图像(如果这是高性能的话)。
理想情况下,我想知道如何使用库存列表控件来做到这一点。但是,如果这是不可能的,那么请告诉我使用 3rd 方代码的方法。
更新
这是我最终使用的代码:
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 并使用布尔值来指示是否应突出显示该行。