没有自定义继承自CListCtrl的新类,我用CListCtrl创建了对象m_table。如何更改当前插入数据的文本颜色?
下面是我的代码块:
void CClassView::OnCustomdrawMyList(NMHDR* pNMHDR, LRESULT* pResult)
{
NMLVCUSTOMDRAW* pLVCD = reinterpret_cast<NMLVCUSTOMDRAW*>(pNMHDR);
*pResult = 0;
if (CDDS_PREPAINT == pLVCD->nmcd.dwDrawStage)
{
*pResult = CDRF_NOTIFYITEMDRAW;
}
else if (CDDS_ITEMPREPAINT == pLVCD->nmcd.dwDrawStage)
{
COLORREF crText;
if ((pLVCD->nmcd.dwItemSpec % 3) == 0)
crText = RGB(255, 0, 0);
else if ((pLVCD->nmcd.dwItemSpec % 3) == 1)
crText = RGB(0, 255, 0);
else
crText = RGB(128, 128, 255);
int nItemIndex = static_cast<int>(pLVCD->nmcd.dwItemSpec);
int nSubItemIndex = static_cast<int>(pLVCD->iSubItem);
CString strValue = m_table2.GetItemText(nItemIndex, nSubItemIndex);
if (strValue == _T("F"))
{
pLVCD->clrText = RGB(255, 0, 0);
}
pLVCD->clrText = crText;
*pResult = CDRF_DODEFAULT;
}
}
我尝试在OnCustomdrawMyList函数中获取当前插入位置的索引,通过索引获取数据,将获取到的数据与预期改变颜色进行比较。但这并没有成功。
我认为你的意思是子项中的文本,那么你必须处理更多的绘制状态。 另外,您不得退货
CDRF_DODEFAULT
适当的是 CDRF_NOTIFYSUBITEMDRAW
或 CDRF_NEWFONT
。
void CClassView::OnCustomdrawMyList(NMHDR* pNMHDR, LRESULT* pResult)
{
LPNMCUSTOMDRAW pNMCD = reinterpret_cast<LPNMCUSTOMDRAW>(pNMHDR);
//for this notification, the structure is actually a
// NMLVCUSTOMDRAW that tells you what's going on with the custom
// draw action. So, we'll need to cast the generic pNMHDR pointer.
LPNMLVCUSTOMDRAW lplvcd = (LPNMLVCUSTOMDRAW)pNMHDR;
switch (lplvcd->nmcd.dwDrawStage)
{
case CDDS_PREPAINT:
*pResult = CDRF_NOTIFYSUBITEMDRAW; // ask for subitem notifications.
break;
case CDDS_ITEMPREPAINT:
*pResult = CDRF_NOTIFYSUBITEMDRAW; // ask for subitem notifications.
break;
case CDDS_ITEMPREPAINT | CDDS_SUBITEM: // recd when CDRF_NOTIFYSUBITEMDRAW is returned in response to CDDS_ITEMPREPAINT.
*pResult = CDRF_DODEFAULT;
:
:
COLORREF clrBk = afxGlobalData.clrWindow;
COLORREF clrTxt = afxGlobalData.clrWindowText;
if (condition)
{
clrTxt = WHITE;
clrBk = BLUE;
}
lplvcd->clrTextBk = clrBk;
lplvcd->clrText = clrTxt;
*pResult = CDRF_NEWFONT;
// *pResult = CDRF_NOTIFYSUBITEMDRAW;
break;
} // CDDS_ITEMPREPAINT | CDDS_SUBITEM
case CDDS_ITEMPOSTPAINT:
lplvcd->clrTextBk = RED;
break;
default: // it wasn't a notification that was interesting to us.
*pResult = CDRF_DODEFAULT;
}
}