如何根据特定列中存在的文本更改列表控件中的特定行颜色?

问题描述 投票:0回答:1

我正在使用 MFC 函数 OnCustomDraw 来更改行的文本颜色。但列表控件中的所有行都变为红色,而不是特定行。我还添加了条件来检查文本。在我的 listCtrl 第七列中,有护照详细信息,例如“是”和“否”。因此,如果某人的护照为“否”,则只有该行文本应为红色。请帮我解决这个问题。我正在使用下面的代码。

void CMyListClass::OnCustomdrawMyList(NMHDR* pNMHDR, LRESULT* pResult)
{
    NMLVCUSTOMDRAW* pLVCD = reinterpret_cast<NMLVCUSTOMDRAW*>(pNMHDR);

    *pResult = CDRF_DODEFAULT;

    if (CDDS_PREPAINT == pLVCD->nmcd.dwDrawStage)
    {
        *pResult = CDRF_NOTIFYITEMDRAW;
    }
    else if (CDDS_ITEMPREPAINT == pLVCD->nmcd.dwDrawStage)
    {
        COLORREF crText;

        int nCol = 6;
        CString m_SearchThisItemText = _T("No");

        for (int i = 0; i < m_list.GetItemCount(); ++i)
        {
            CString szText = m_list.GetItemText(i, nCol);
            if (szText == m_SearchThisItemText)
            {
                crText = RGB(255, 0, 0);
                break;
            }
        }

        pLVCD->clrText = crText;

        *pResult = CDRF_DODEFAULT;
    }
}

我尝试获取子项目颜色但没有成功。

mfc win32gui clistctrl
1个回答
0
投票

您必须检查状态

CDDS_ITEMPREPAINT | CDDS_SUBITEM

 else if ((CDDS_ITEMPREPAINT | CDDS_SUBITEM) == pLVCD->nmcd.dwDrawStage)
© www.soinside.com 2019 - 2024. All rights reserved.