怎么在WTL中的修改ListViewCtrl中某一行字体的颜色

如何在WTL中的修改ListViewCtrl中某一行字体的颜色
小弟我接触WTL时间不长,在开发过程虽说MFC和WTL差不多,但是在一些细节上把握不住呀,请大神指点。
我想做一个ListViewCtrl的扩展类,其中一个功能是改变某一行的文字颜色。先写这个类继承了CListViewCtrl和CCustomDraw。再重写OnPrePaint和OnItemPrePaint

class CListViewCtrlEx : public CWindowImpl<CListViewCtrlEx, CListViewCtrl>, public CCustomDraw<CListViewCtrlEx>
{
    BEGIN_MSG_MAP(CListViewCtrlEx) 
        CHAIN_MSG_MAP(CCustomDraw<CListViewCtrlEx>)  
    END_MSG_MAP() 

    DWORD   OnPrePaint(int /*idCtrl*/, LPNMCUSTOMDRAW /*lpNMCustomDraw*/);
    DWORD   OnItemPrePaint(int /*idCtrl*/, LPNMCUSTOMDRAW lpNMCustomDraw);
};

DWORD CListViewCtrlEx::OnPrePaint(int /*idCtrl*/, LPNMCUSTOMDRAW /*lpNMCustomDraw*/)
{
    return CDRF_NOTIFYITEMDRAW;
}

DWORD CListViewCtrlEx::OnItemPrePaint(int /*idCtrl*/, LPNMCUSTOMDRAW lpNMCustomDraw)
{
    NMLVCUSTOMDRAW* pLVCD = reinterpret_cast<NMLVCUSTOMDRAW*>( lpNMCustomDraw );
    pLVCD->clrText = RGB(128, 128, 128);

    return CDRF_DODEFAULT;    //这里面不是很会写了
}

另外,我想要提供一个接口,专门修改Item里面Text颜色的接口,我的想法如下:

BOOL CListViewCtrlEx::SetItemColor(HWND hWnd, UINT nRow, COLORREF clrNewColor)
{
    LVITEM lvListItem;
    lvListItem.iItem = nRow;
    ListView_GetItem(hWnd, &lvListItem);

    lvListItem.lParam = (DWORD)clrNewColor;
    ListView_SetItem(hWnd, &lvListItem);

    return ListView_RedrawItems(hWnd, nRow, nRow);
}

但是结果是颜色不变,还是黑色。请问该如何写这个功能,如何让SetItemColor和OnItemPrePaint关联,在网上查,感觉这方面的资料很少。
 
字体 rgb listview

------解决方案--------------------
NOTIFY_HANDLER(IDC_LIST1, NM_CUSTOMDRAW, OnNMCustomdrawList1)

LRESULT OnNMCustomdrawList1(int /*idCtrl*/, LPNMHDR pNMHDR, BOOL& /*bHandled*/);


LRESULT CMainDlg::OnNMCustomdrawList1(int /*idCtrl*/, LPNMHDR pNMHDR, BOOL& /*bHandled*/)
{
LPNMLVCUSTOMDRAW pLVNMCD = reinterpret_cast< LPNMLVCUSTOMDRAW>(pNMHDR);
int nResult = CDRF_DODEFAULT; 


if (CDDS_PREPAINT == pLVNMCD->nmcd.dwDrawStage)
{
nResult = CDRF_NOTIFYITEMDRAW;
}
else if (CDDS_ITEMPREPAINT == pLVNMCD->nmcd.dwDrawStage)
{
nResult = CDRF_NOTIFYSUBITEMDRAW;
}
else if (pLVNMCD->nmcd.dwDrawStage == (CDDS_ITEMPREPAINT
------解决方案--------------------
CDDS_SUBITEM))
{
                //单双行不同颜色
if (pLVNMCD->nmcd.dwItemSpec%2 == 0)
{
pLVNMCD->clrText = RGB(60, 128, 160);
}
else
{
pLVNMCD->clrText = RGB(80, 160, 80);
}
}

return nResult;
}


------解决方案--------------------
引用:
Quote: 引用:

私信Me,留个email。
我比较推荐继承并嵌入COwnerDraw重载DrawItem。
你的问题可能是,必须在ListViewCtrl的父窗口的消息映射中加上
DEFAULT_REFLECTION_HANDLER()

发不了私信,呵呵~ 
不是很清楚CCustomDraw和COwnerDraw到底有什么不同,在开发过程中自定义控件,特别是要重绘的话,两者之间的区别和联系?

http://hi.baidu.com/sumos/item/e3ae61e664713f3c4cdcaf0f
我之前自绘ListViewCtrl的代码,不太全,你可以参考一下