一开始以为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)
{
}
本文介绍了如何使用CListCtrl控件在MFC中设置指定行的字体颜色和背景颜色。通过添加NM_CUSTOMDRAW消息并实现相应处理函数,可以方便地定制控件的显示样式。
4513

被折叠的 条评论
为什么被折叠?



