vc CListCtr控件设置指定行字体颜色,背景颜色

一开始以为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(pNMHDR);
    *pResult = CDR_DODEFAULT;
    NMLVCUSTOMDRAW *pLVCD = reinterpret_cast(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)
{
    
}

你可能感兴趣的:(Window系统)