gpt4 book ai didi

visual-c++ - MFC:如何更改 ListCtrl 各行的颜色/粗体?

转载 作者:行者123 更新时间:2023-12-04 06:52:18 25 4
gpt4 key购买 nike

使用 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 并使用一个 bool 值来指示是否应突出显示该行。

最佳答案

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

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

This codeproject article可能是一个很好的起点。

Here is a shorter code example在 CListCtrl 中设置特定行的颜色。

关于visual-c++ - MFC:如何更改 ListCtrl 各行的颜色/粗体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8822657/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com