我以前做过这个,但令我惊讶的是CListCtrl不会显示文字的颜色。我在对话框上有列表视图控件。我正在使用VS2010,还有其他我需要的东西吗?
void CGameView::OnCustomdrawListBatsmen(NMHDR *pNMHDR, LRESULT *pResult)
{
//LPNMCUSTOMDRAW pNMCD = reinterpret_cast<LPNMCUSTOMDRAW>(pNMHDR);
LPNMLVCUSTOMDRAW pNMLVCD = reinterpret_cast<LPNMLVCUSTOMDRAW>(pNMHDR);
*pResult = CDRF_DODEFAULT;
switch( pNMLVCD->nmcd.dwDrawStage )
{
case CDDS_PREPAINT:
*pResult = CDRF_NOTIFYITEMDRAW;
break;
case CDDS_ITEMPREPAINT:
pNMLVCD->clrTextBk = RGB(255,0,0);
pNMLVCD->clrText = RGB(255, 0, 0 );
*pResult = CDRF_NOTIFYSUBITEMDRAW;
break;
case CDDS_ITEMPREPAINT | CDDS_SUBITEM:
// if( pNMLVCD->iSubItem == 1 )
pNMLVCD->clrTextBk = RGB(0,255,0);
pNMLVCD->clrText = RGB(255, 0, 0 );
break;
}
*pResult = 0;
}
当我调试它时,控件永远不会通过第一种情况!我不知道是那个?我是否需要在资源视图中设置列表控件属性?
答案 0 :(得分:0)
也许, 在CGameView中,添加:
1
ON_NOTIFY(LVN_GETDISPINFO, IDC_LIST_Batsmen, GetDispInfo)
2
void CGameView::GetDispInfo(NMHDR* pNMHDR, LRESULT* pResult)
在CListCtrl类中,添加:
ON_NOTIFY_REFLECT(NM_CUSTOMDRAW, OnCustomdrawListBatsmen)
答案 1 :(得分:0)
我解决了这个问题,这是最后一行:
*pResult = 0;
需要删除它,因为它正在重置在switch case中设置的任何值。