使用MFC和Visual Studio 2010 C ++。我需要一种方法来使CListCtrl的某些单独行显得突出(但是我不想使用内置的选择功能来突出显示行)。它可能是行背景的颜色,或字体粗细,甚至可能是图像(如果是高性能的)。
理想情况下,我想知道如何使用库存清单控件来完成此操作。但是,如果无法做到这一点,请告诉我使用第三方代码的方法。
更新
以下是我最终使用的代码:
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,以指示是否应突出显示该行。
答案 0 :(得分:5)
这里的关键信息是发送到CListCtrl(以及其他一些控件)的NM_CUSTOMDRAW消息。它允许您告诉Windows您要自定义绘制CListCtrl的某些部分。我们的想法是,该消息允许您告诉应该自定义绘制控件的哪个部分。因为自定义绘制整个CListCtrl只是为了改变单元格的文本颜色将是完全矫枉过正。
不用担心,您不必自己处理自定义绘图:该消息允许为控件的一个特定行或单元格设置字体和/或文本/背面颜色。
This codeproject article可能是一个很好的起点。
Here is a shorter code example设置CListCtrl中特定行的颜色。
答案 1 :(得分:-2)
您可以使用以下代码更改整个列表背景颜色,但我不确定是否支持更改每行颜色的功能。以下是代码:
YourControl.SetBkColor(RGB(212,208,200));
我希望它有所帮助。
答案 2 :(得分:-3)
以下是我对我的计划所做的事情, 如果我想要突出显示的行是cin或cout或任何其他只是将此代码放在该行上方
SetConsoleTextAttribute( GetStdHandle(STD_OUTPUT_HANDLE), 0x0F);
最后一部分,即0x0F让你改变背景和文字的颜色代码
将其更改为您想要的颜色后,只需在要突出显示的行下面插入另一个,即
SetConsoleTextAttribute( GetStdHandle(STD_OUTPUT_HANDLE), 0x0C);
这是颜色表及其代码
0 = Black 8 = Gray
1 = Blue 9 = Light Blue
2 = Green A = Light Green
3 = Aqua B = Light Aqua
4 = Red C = Light Red
5 = Purple D = Light Purple
6 = Yellow E = Light Yellow
7 = White F = Bright White
示例表示黑色背景和蓝色文字;
SetConsoleTextAttribute( GetStdHandle(STD_OUTPUT_HANDLE), 0x01);