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<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)
{
    
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章