一開始以爲CListBox和CListCtr是差不多的,用CListBox手動添加NM_CUSTOMDRAW消息後,一直不響應,不知道是什麼原因,只能改用CListCtr,CListCtr可以通過類嚮導添加NM_CUSTOMDRAW,就比較方便了.
先定義一個宏#define LRED 1
綁定CListCtr控件變量m_list
通過類嚮導添加NM_CUSTOMDRAW後,在消息映射函數中添加代碼.
void dlg::OnCustomdrawList3(NMHDR *pNMHDR,LRESULT *pResult)
{
LPNMTVCUSTOMDRAW pNMCD = reinterpret_cast<LPNMTVCUSTOMDRAW>(pNMHDR);
*pResult = CDR_DODEFAULT;
NMLVCUSTOMDRAW *pLVCD = reinterpret_cast<NMLVCUSTOMDRAW*>(pNMHDR);
if(CDDS_PREPAINT == pLVCD->nmcd.dwDrawStage)
{
*pResult = CDRF_NOTIFYITEMDRAW;
}
else if(CDDS_ITEMPREPAINT | CDDS_SUBITEM==pLVCD->nmcd.dwDrawStage)
{
if(LRED == pLVCD->nmcd.lItemlParam)
{
pNMCD->clrTextBk = RGB(255,0,0);
pNMCD->clrText = RGB(255,0,0);
}
}
}
要設置指定行樣式,就要調用m_list.SetItemData(0,LRED);0表示第0行,LRED是定義的宏,根據宏定義判斷設置。
也可以通過手動添加NM_CUSTOMDRAW消息映射函數,在頭文件添加函數聲明,
public: afx_msg void OnCustomdrawList3(NMHDR *pNMHDR,LRESULT *pResult);
cpp文件中的BEGIN_MESSAGE_MAP(dlg,CDialog)
END_MESSAGE_MAP()
之間添加ON_NOTIFY(NM_CUSTOMDRAW,IDC_LIST,&dlg::OnCustomdrawList)
//dlg.h 下面代碼屬於dlg.h的
class dlg : public CDialog{
public:
afx_msg void OnCustomdrawList3(NMHDR *pNMHDR,LRESULT *pResult);
}
//dlg.cpp,下面代碼屬於dlg.cpp的
BEGIN_MESSAGE_MAP(dlg,CDialog)
ON_NOTIFY(NM_CUSTOMDRAW,IDC_LIST,&dlg::OnCustomdrawList)
END_MESSAGE_MAP()
void dlg::OnCustomdrawList3(NMHDR *pNMHDR,LRESULT *pResult)
{
}