您的位置:首页 > 其它

如何在ctrllist控件上改变制定的颜色?

2010-07-06 10:58 369 查看
这个问题困扰了我几天,终于搞出来了,方法如下。

增加NM_CUSTOMDRAW消息。至于为什么要使用以及如何使用这个消息,请看下面的解释:

http://hi.baidu.com/winnyang/blog/item/4f0e29511e9cc2858d543026.html

如何使用:

http://blog.csdn.net/songsu/archive/2009/11/12/4802459.aspx

下面说我如何解决的:

在MFC class wizard中增加NM_CUSTOMDRAW消息处理函数,然后注释掉原先代码,再下面加入如下代码:

NMLVCUSTOMDRAW* pLVCD = reinterpret_cast<NMLVCUSTOMDRAW*>( pNMHDR );
if (CDDS_PREPAINT == pLVCD->nmcd.dwDrawStage)
{
*pResult = CDRF_NOTIFYITEMDRAW;
}else if (CDDS_ITEMPREPAINT == pLVCD->nmcd.dwDrawStage){
*pResult = CDRF_NOTIFYSUBITEMDRAW;
//COLORREF clr;
//clr = RGB(255, 0 , 0);
//*pResult = CDRF_DODEFAULT;
}else if (pLVCD->nmcd.dwDrawStage == (CDDS_ITEMPREPAINT|CDDS_SUBITEM))
{
//int nItem = pLVCD->iSubItem;
int nItem = static_cast <int> (pLVCD-> nmcd.dwItemSpec);
if (nItem == nNeedDrawItem)
{
COLORREF clr;
clr = RGB(255, 0 , 0);
pLVCD->clrTextBk = clr;
}else
{
pLVCD->clrTextBk = RGB(255, 255,255);
}
*pResult = CDRF_DODEFAULT;
}

,最后再你想改变行颜色的地方调用listctrl的redrawitems函数。

例如在我这里做如下调用:

if (!strcmp(listitem->webalive,"否"))
{
//AfxMessageBox(A2W(listitem->webalive));
nNeedDrawItem = listitem->item;
m_listresult.RedrawItems(nNeedDrawItem,nNeedDrawItem);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐