怎么在WTL中的修改ListViewCtrl中某一行字体的颜色
如何在WTL中的修改ListViewCtrl中某一行字体的颜色
小弟我接触WTL时间不长,在开发过程虽说MFC和WTL差不多,但是在一些细节上把握不住呀,请大神指点。
我想做一个ListViewCtrl的扩展类,其中一个功能是改变某一行的文字颜色。先写这个类继承了CListViewCtrl和CCustomDraw。再重写OnPrePaint和OnItemPrePaint
另外,我想要提供一个接口,专门修改Item里面Text颜色的接口,我的想法如下:
但是结果是颜色不变,还是黑色。请问该如何写这个功能,如何让SetItemColor和OnItemPrePaint关联,在网上查,感觉这方面的资料很少。
------解决方案--------------------
------解决方案--------------------
http://hi.baidu.com/sumos/item/e3ae61e664713f3c4cdcaf0f
我之前自绘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;
}
------解决方案--------------------
http://hi.baidu.com/sumos/item/e3ae61e664713f3c4cdcaf0f
我之前自绘ListViewCtrl的代码,不太全,你可以参考一下