如何在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);
}
增加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);
}
相关文章推荐
- CAknSettingItemList 如何改变 字体 颜色
- winfrom 树形控件如何实现鼠标经过节点时光标颜色改变效果
- 如何改变控件的颜色
- VC中如何改变对框中控件的颜色
- MFC 如何改变某个子控件的文本颜色
- MFC List Control控件改变Item的颜色和背景色
- Flex中如何通过设置backgroundColor和backgroundAlpha改变DateChooser控件背景颜色的例子
- VC中如何改变对框中控件的颜色
- 如何改变控件的颜色
- 当鼠标移动到Picture控件时,如何改变static控件的字体的颜色
- 控件容器如何点击后改变背景颜色(如LinearLayout...)
- 图形的绘制,如何使用自定义画笔(颜色,线宽,线形)。如何为程序中添加选项菜单和选项设置对话框,如何使用标准颜色对话框,如何使用字体对话框,在选项对话框中实现预览功能。实现选项对话框和窗口类中的数据交换。如何改变对话框和控件的背景色,如何改变控件的文本颜色,
- 如何改变treeview控件选中节点的高亮颜色,就是大家都熟悉的深蓝色,同样可以改变失去焦点时,高亮显示的颜色
- VC中如何改变对话框中控件的颜色
- 如何改变控件的颜色
- 如何在改变mfc控件上文字的字体和颜色
- 如何改变界面和非按钮控件的背景颜色
- 如何改变ListView中的子窗口ListColumns的颜色,它一直是灰色的
- VC中如何改变对框中控件的颜色
- 如何改变STATIC控件的文字颜色