MFC列表控件更改一行的字体颜色
参考自(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列表控件更改一行的字体颜色的更多相关文章
- mfc 列表控件
经常使用的mfc控件:list control,记录下 首先将list control拖入到对话框中,然后命名ID,通过类向导,类型为control,控件变量名(m_showlist), vie ...
- MFC 列表控件List Control
一般用带有表头的报表模式,所以属性:View设为Report // OnInitDialog()中 CString str[] = {TEXT("姓名"),TEXT("性 ...
- Visual studio C++ MFC之列表控件CListCtrl Control
背景 本篇旨在MSDN帮助文档下总结列表控件CListCtrl Control的使用,并列出碰到的具体问题. 正文 列表型控件List Control的类是ClistCtrl,具体成员对象详见链接,以 ...
- 高级列表控件ListCtrl关联的MFC中的类:CListCtrl
高级列表控件ListCtrl关联的MFC中的类:CListCtrl■ 报表样式ListCtrl常用操作:1.添加列标题头:InsertColumn2.获取与设置列宽:GetColumnWidth.Se ...
- 【VS开发】MFC CListCtrl列表控件的消息响应
MFC里的CListCtrl选中一行,消息是哪个.实在想不起来了.找了一篇文章,比较有用: http://www.cnblogs.com/hongfei/archive/2012/12/25/2832 ...
- 列表控件ListBox关联的MFC中的类:CListBox
列表控件ListBox关联的MFC中的类:CListBox ######################################################## 1.在列表的结尾添加一项: ...
- MFC可视化 列表控件的使用
1.应该加入头文件 #include <Atlbase.h> 2.示例 类向导给列表控件绑定变量m_list DWORD dwExStyle=LVS_EX_FULLRO ...
- MFC常用控件之列表视图控件(List Control)
近期学习了鸡啄米大神的博客,对其中的一些知识点做了一些自己的总结.不过,博客内容大部分来自鸡啄米.因此,这个博客算是转载博客,只是加了一些我自己的理解而已.若想学习鸡啄米大神的博客总结,请点击连接:h ...
- VC/MFC ListCtrl 控件功能使用汇总(转)
以下未经说明,listctrl默认view 风格为report 相关类及处理函数 MFC:CListCtrl类 SDK:以 “ListView_”开头的一些宏.如 ListView_InsertCol ...
随机推荐
- 如何让Enum枚举实现异或操作
var flag = Week.Monday; flag = flag | Week.Wednesday; if ((flag & Week.Monday) == Week.Monday ) ...
- Python之while循环
1.While循环基础 2.While循环进阶 3.其他
- 关于Spring的Quartz定时器设定
在实际的开发业务中经常会遇到定时执行某个任务,如果项目使用的ssh框架的话,就需要配合spring来使用定时器.spring的定时器是一个固定的配置格式,具体的applicationContext配置 ...
- Virtualbox扩容C盘
oracle vm virtualbox虚拟机里面系统盘C盘容量不够,需要扩容,步骤如下: 1.使用命令更改当前虚拟机的文件大小 VBoxManage.exe modifyhd YOUR_HARD_D ...
- sqlserver2016新功能
SQL Server 2016中的新功能(数据库引擎) 2017年1月13日 23分钟阅读时长 作者 本人建了个领优惠卷购物群,平时网购可以省点钱.有需要的加群:511169656交流,谢谢 本主题 ...
- java锁
---恢复内容开始--- synchronized 互斥锁 synchronized(this) 当前类的所有synchronized(this) 都被锁了,还有synchronized static ...
- k8s 命令补全
安装:apt-get install bash-completion source <(kubectl completion bash) echo "source <(kubec ...
- iOS如何转换十三位的时间戳
//将十三位的时间戳转换为日期 - (NSString *)getDate:(NSString *)jsonDate { //jsonDate类似这种/Date(1447659630000)/ NSA ...
- java Page分页显示
//entity层实体类 import java.util.List; //分页展示 //相关属性:当前页,页大小(每页显示的条数),总页数,总条数,数据 //select * from t_user ...
- 分布式一致性算法2PC和3PC
为了解决分布式一致性问题,产生了不少经典的分布式一致性算法,本文将介绍其中的2PC和3PC.2PC即Two-Phase Commit,译为二阶段提交协议.3PC即Three-Phase Commit, ...