【发布时间】:2012-02-08 00:12:39
【问题描述】:
使用 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 并使用布尔值来指示是否应突出显示该行。
【问题讨论】:
-
这确实是我想到的 ;-) 关于
GetItemData(rowNumber),你在cd->nmcd.lItemlParam中没有它吗 -
@Serge-appTranslator:啊,好点子,可以节省通话时间。我得试试。
标签: visual-c++ mfc row highlighting clistctrl