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来指示是否应该突出显示该行.
这里的关键信息是发送到CListCtrl(以及其他一些控件)的NM_CUSTOMDRAW消息.它允许您告诉Windows您要自定义绘制CListCtrl的某些部分.我们的想法是,该消息允许您告诉应该自定义绘制控件的哪个部分.因为自定义绘制整个CListCtrl只是为了改变单元格的文本颜色将是完全矫枉过正.
不用担心,您不必自己处理自定义绘图:该消息允许为控件的一个特定行或单元格设置字体和/或文本/背面颜色.
这个代码项目文章可能是一个很好的起点.
下面是一个较短的代码示例,用于设置CListCtrl中特定行的颜色.
归档时间: |
|
查看次数: |
13835 次 |
最近记录: |