消息映射:
CListCtrl:
ON_NOTIFY(NM_CUSTOMDRAW,IDC_LIST,OnCustomdrawBaseListCtrl)
CListCtrl派生类:
ON_NOTIFY_REFLECT(NM_CUSTOMDRAW,OnCustomdrawBaseListCtrl)
函数声明(CListCtrl类与派生类声明相同):
afx_msg void OnCustomdrawBaseListCtrl(NMHDR* pNMHDR, LRESULT* pResult);
函数实现:
void CBaseListCtrl::OnCustomdrawBaseListCtrl(NMHDR* pNMHDR, LRESULT* pResult){
NMLVCUSTOMDRAW* pLVCD = reinterpret_cast<NMLVCUSTOMDRAW*>( pNMHDR );
*pResult = CDRF_NOTIFYITEMDRAW;
if ( CDDS_PREPAINT == pLVCD->nmcd.dwDrawStage ){
*pResult = CDRF_NOTIFYITEMDRAW;
}
else if ( CDDS_ITEMPREPAINT == pLVCD->nmcd.dwDrawStage ){
if (GetItemState((int)pLVCD->nmcd.dwItemSpec,LVIS_SELECTED)){
pLVCD->nmcd.uItemState &= ~CDIS_SELECTED;//~~~~~~~~~这句话太重要了
//pLVCD->nmcd.uItemState ^= CDIS_SELECTED;// The same right
pLVCD->clrTextBk = RGB(0,0,255);//蓝色背景
pLVCD->clrText = RGB(255,255,255);//白色文字
}
*pResult = CDRF_NEWFONT;
}
}
附带:
链表选中:
m_List.SetItem(index, 0, LVIF_STATE, NULL, 0, LVIS_SELECTED, LVIS_SELECTED, 0);
取消选中:
m_List.SetItemState(i,0,-1);
附图: