我想将第一列的背景涂成灰色。 CDDS_ITEMPREPAINT的问题是,仅在有项目时才为背景着色。像这样:



目前,这是我的代码:

{
LPNMLVCUSTOMDRAW pNMLVCD = reinterpret_cast<LPNMLVCUSTOMDRAW>(pNMHDR);
    *pResult = CDRF_DODEFAULT;
    switch (pNMLVCD->nmcd.dwDrawStage)
    {
    case CDDS_PREPAINT:
        *pResult = CDRF_NOTIFYITEMDRAW;
        break;

    case CDDS_ITEMPREPAINT:
        *pResult = CDRF_NOTIFYSUBITEMDRAW;
        break;

    case CDDS_ITEMPREPAINT | CDDS_SUBITEM:
        if (pNMLVCD->iSubItem == 0)
        {
            pNMLVCD->clrTextBk = RGB(97,97,97);
        }
        else
        {
            pNMLVCD->clrTextBk = RGB(255,255,255);
        }
        break;
    }
}


谁能解释我该如何解决?

最佳答案

无法通过自定义绘制完成此操作。

即使使用ownerdraw,例程也仅用于存在项。要给空闲区域着色,您可能需要覆盖WM_ERASEBKGND,并且需要在其中做您自己的事情。

关于c++ - 颜色CListCtrl列不带CDDS_ITEMPREPAINT阶段的背景,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20369713/

10-13 09:29