在MFC中更改CListCtrl的完整列的背景颜色

时间:2013-11-25 14:48:33

标签: c++ mfc clistctrl

我在MFC的报表视图中创建了一个CListCtrl。 我想为第一列(完整列,不仅是那些项目所在的单元格)着色,背景为灰色。

我该怎么做? 感谢

2 个答案:

答案 0 :(得分:0)

实现此方法的方法是分别为第一行的每个单元格着色。代码看起来像下面,基本上是蓝色打印,但它应该工作(注意:我没有测试这个帖子)。您必须使用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;
    }
}

答案 1 :(得分:0)

这里有两篇完美的文章,详细描述了自定义绘图。

Part I&amp; Part II