我正在使用 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;
}
}
我尝试获取子项目颜色但没有成功。
您必须检查状态
CDDS_ITEMPREPAINT | CDDS_SUBITEM
else if ((CDDS_ITEMPREPAINT | CDDS_SUBITEM) == pLVCD->nmcd.dwDrawStage)