在 MFC 中更改 CListCtrl 整列的背景颜色
Posted
技术标签:
【中文标题】在 MFC 中更改 CListCtrl 整列的背景颜色【英文标题】:Change Background color of full column of CListCtrl in MFC 【发布时间】:2013-11-25 14:48:32 【问题描述】:我在 MFC 的报表视图中创建了一个 CListCtrl。 我想用灰色背景为第一列(整列,不仅是 Item 所在的那些单元格)着色。
我该怎么做? 谢谢
【问题讨论】:
***.com/q/19682479/385646的可能重复 我将实现一个CMFCLisCtrl
派生类并覆盖OnGetCellBkColor
方法。这种方式比使用自定义绘图要容易得多。我在这里有这个答案,但是一些版主删除了它,因为他/她认为它等于我在***.com/a/37571685/383779 OnGetCellBkColor
和OnGetCellTextColor
上提供的答案是不同的东西! 随便!
【参考方案1】:
实现这一点的方法是分别为第一行的每个单元格着色。代码如下所示,基本上是一个蓝图,但它应该可以工作(注意:我没有为这篇文章测试这个)。您必须使用lplvcd->iSubItem
并绘制每一行的第一列。
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;
case CDDS_SUBITEM | CDDS_ITEMPREPAINT:
// something like if(lplvcd->iSubItem == 0 ) to paint first column
lplvcd->clrText = RGB(0,0,255);
*pResult = CDRF_NEWFONT;
return;
default:
break;
【讨论】:
【参考方案2】:这里有两篇完美的文章,详细描述了自定义绘制。
Part I & Part II
【讨论】:
以上是关于在 MFC 中更改 CListCtrl 整列的背景颜色的主要内容,如果未能解决你的问题,请参考以下文章