参考自(http://blog.csdn.net/ribut9225/article/details/6720639)

1.首先从CListCtrl 继承一个类,命名为CListCtrlCl

在头文件中加摸板

CMap<DWORD, DWORD&, COLORREF, COLORREF&> MapItemColor;好在这里查找你的修改的颜色。

CListCtrlCl.h如下:

#pragma once
// CListCtrlCl class CListCtrlCl : public CListCtrl
{
CMap<DWORD, DWORD&, COLORREF, COLORREF&> MapItemColor;
DECLARE_DYNAMIC(CListCtrlCl) public: CListCtrlCl();
virtual ~CListCtrlCl(); protected:
DECLARE_MESSAGE_MAP()
afx_msg void OnNMCustomdraw(NMHDR *pNMHDR, LRESULT *pResult);
public:
afx_msg void SetItemColor(DWORD iItem, COLORREF color);
afx_msg void SetAllItemColor(DWORD iItem,COLORREF TextBkColor);
};

2.自己写个消息映射,可能添加不上,要自己写。OnNMCustomdraw 为实现函数

 

BEGIN_MESSAGE_MAP(CListCtrlCl, CListCtrl)
ON_NOTIFY_REFLECT(NM_CUSTOMDRAW, OnNMCustomdraw)
// ON_WM_SIZE()
END_MESSAGE_MAP()

3.写OnNMCustomdraw函数。 

void CListCtrlCl::OnNMCustomdraw(NMHDR *pNMHDR, LRESULT *pResult)
{
// TODO: Add your control notification handler code here
*pResult = CDRF_DODEFAULT;
NMLVCUSTOMDRAW * lplvdr=(NMLVCUSTOMDRAW*)pNMHDR;
NMCUSTOMDRAW &nmcd = lplvdr->nmcd;
switch(lplvdr->nmcd.dwDrawStage)//判断状态
{
case CDDS_PREPAINT:
{
*pResult = CDRF_NOTIFYITEMDRAW;
break;
}
case CDDS_ITEMPREPAINT://如果为画ITEM之前就要进行颜色的改变
{
COLORREF ItemColor;
if(MapItemColor.Lookup(nmcd.dwItemSpec, ItemColor))
// 根据在 SetItemColor(DWORD iItem, COLORREF color) 设置的
// ITEM号和COLORREF 在摸板中查找,然后进行颜色赋值。
{
//lplvdr->clrText = RGB(0,0,0);//ItemColor;
//lplvdr->clrTextBk = ItemColor;
lplvdr->clrText = ItemColor;
*pResult = CDRF_DODEFAULT;
}
}
break;
}
}

4. 修改指定一行的颜色。

void CListCtrlCl::SetItemColor(DWORD iItem, COLORREF color)
{
// m_iCurrentItem = iItem;
// m_CurrentColor = color; MapItemColor.SetAt(iItem, color);//设置某行的颜色。
this->RedrawItems(iItem, iItem);//重新染色 //this->SetCheck(iItem,1);
this->SetFocus(); //设置焦点
UpdateWindow();
}

5.修改全部行的颜色。

void CListCtrlCl::SetAllItemColor(DWORD iItem,COLORREF TextBkColor)
{
//INT_PTR ncount = this->GetItemCount();
if(iItem > 0)
{
for(DWORD numItem = 0; numItem < iItem ;numItem ++)
{
//iItem = i;
MapItemColor.SetAt(numItem, TextBkColor);
this->RedrawItems(numItem, numItem);
}
} return; }

6.

1)在自己项目dialog中加入列表控件,先定义普通列表控件,关联变量(如ObjectList)

2)然后在对应的头文件,将CListCtrlCl ObjectList; 改为 CXListCtrl m_list,

3)注意要包括自写类的头文件,头文件中加入   #include "ListCtrlCl.h" 

cpp文件中调用相应函数

		if(lw_all_wz[i].CompareNoCase(L"无裂纹: ")==0)
ObjectList.SetItemColor(i,RGB(255,255,255));//白色
else{
ObjectList.SetItemColor(i,RGB(255,0,0));//红色
}

  i对应的从0行开始

 另外还参考MSDN(https://msdn.microsoft.com/en-us/library/ms364048(VS.80).aspx#customdraw_topic4 )

                        (http://blog.sina.com.cn/s/blog_7b053996010183u1.html)

 

MFC列表控件更改一行的字体颜色的更多相关文章

  1. mfc 列表控件

    经常使用的mfc控件:list control,记录下   首先将list control拖入到对话框中,然后命名ID,通过类向导,类型为control,控件变量名(m_showlist),  vie ...

  2. MFC 列表控件List Control

    一般用带有表头的报表模式,所以属性:View设为Report // OnInitDialog()中 CString str[] = {TEXT("姓名"),TEXT("性 ...

  3. Visual studio C++ MFC之列表控件CListCtrl Control

    背景 本篇旨在MSDN帮助文档下总结列表控件CListCtrl Control的使用,并列出碰到的具体问题. 正文 列表型控件List Control的类是ClistCtrl,具体成员对象详见链接,以 ...

  4. 高级列表控件ListCtrl关联的MFC中的类:CListCtrl

    高级列表控件ListCtrl关联的MFC中的类:CListCtrl■ 报表样式ListCtrl常用操作:1.添加列标题头:InsertColumn2.获取与设置列宽:GetColumnWidth.Se ...

  5. 【VS开发】MFC CListCtrl列表控件的消息响应

    MFC里的CListCtrl选中一行,消息是哪个.实在想不起来了.找了一篇文章,比较有用: http://www.cnblogs.com/hongfei/archive/2012/12/25/2832 ...

  6. 列表控件ListBox关联的MFC中的类:CListBox

    列表控件ListBox关联的MFC中的类:CListBox ######################################################## 1.在列表的结尾添加一项: ...

  7. MFC可视化 列表控件的使用

    1.应该加入头文件   #include <Atlbase.h>   2.示例     类向导给列表控件绑定变量m_list DWORD   dwExStyle=LVS_EX_FULLRO ...

  8. MFC常用控件之列表视图控件(List Control)

    近期学习了鸡啄米大神的博客,对其中的一些知识点做了一些自己的总结.不过,博客内容大部分来自鸡啄米.因此,这个博客算是转载博客,只是加了一些我自己的理解而已.若想学习鸡啄米大神的博客总结,请点击连接:h ...

  9. VC/MFC ListCtrl 控件功能使用汇总(转)

    以下未经说明,listctrl默认view 风格为report 相关类及处理函数 MFC:CListCtrl类 SDK:以 “ListView_”开头的一些宏.如 ListView_InsertCol ...

随机推荐

  1. Excel--截取所需内容

    如上图,需截取*号后的数字,那么公式怎么写: 1.使用Find和Mid函数: FIND:获取指定字符所在字串的位置: MID:截取字串中的子串. 写法: 2.也可以使用Replace函数代替mid函数 ...

  2. 持续更新scrapy的错误,ValueError: Missing scheme in request url:

    只需要将 for href in response.xpath('XX').extract(): yield Request(hrefs) 修改为下面,就可以显示出来 for href in resp ...

  3. IDEA右侧 Maven oracle依赖包有红色波浪线

    1\下载 ojdbc14-10.2.0.4.0.jar http://www.java2s.com/Code/Jar/o/Downloadojdbc14102040jar.htm 2.将ojdbc14 ...

  4. MySQL单机单实例安装脚本(转载)

    说明:使用mysql generic tar.gz包快速安装mysql 三个文件installation_of_single_mysql.sh.template_install-my.cnf.mysq ...

  5. 使用sqlplus创建Oracle表空间

    登录 dos窗口输入以下命令:sqlplus  回车 提示输入用户名——即创建数据库实例时的用户名 ,用户名输入:sys as sysdba 密码.........回车登录 查看数据文件位置 接下来, ...

  6. 刘志梅2017710101152.《面向对象程序设计(java)》第十二周学习总结

    实验十二  图形程序设计 实验时间 2018-11-14 1.理论知识 (1) 基本AWT库采用将处理用户界面元素的任务委派给每个目标平台的本地GUI工具箱的方式,由本地GUI工具箱负责用户界面元素的 ...

  7. JNI内存泄露JNI ERROR (app bug): local reference table overflow (max=512)

    原因是没即时释放对象,原本的代码是这样 static jobject getMaps(JNIEnv *env,jclass obj) { jclass stringbuilder_class = (* ...

  8. 彻底解决windows10+matlab2018a调用libsvm时出现找不到编译器问题

    本文转载自:Shane Zhao博客(CSDN) https://blog.csdn.net/silence2015/article/details/53106156 个人申明,只是因为解决这个问题花 ...

  9. redis 安装与使用

    到git 官网上下载redis: DownLoad,选择.zip 压缩包 2. 下载后,对zip 包进行解压,解压后如下: 3. 配置并安装redis, 打开window dos 窗口,将目录切换到解 ...

  10. 正确的学python方式

    首先呢,和其他的各种学习都一样,你一定要明白你学习的目标是什么.有的人想要通过学习Python,转行成程序员,实现行业上的转变:有的人希望通过学习Python,在现有的岗位上提升自己:当然也有很多人只 ...