ListCtrl控件着色

简介: 最近在写一款山寨的反病毒软件,大致功能已经实现,还有一些细小的环节需要细化。 其中,在界面编程中,就用到了给ListCtrl控件着色,查看了网上一些文章,终于实现了。 其实说白了,原理很简单,就是ListCtrl在插入一个Item的时候,会发送一个NM_CUSTOMDRAW的消息,我们只要实现这个消息响应函数,并在里面绘制我们的颜色就可以了。

最近在写一款山寨的反病毒软件,大致功能已经实现,还有一些细小的环节需要细化。

其中,在界面编程中,就用到了给ListCtrl控件着色,查看了网上一些文章,终于实现了。

其实说白了,原理很简单,就是ListCtrl在插入一个Item的时候,会发送一个NM_CUSTOMDRAW的消息,我们只要实现这个消息响应函数,并在里面绘制我们的颜色就可以了。

但是响应这个消息在VC6.0下需要自己实现:

1.在头文件中声明函数:afx_msg void OnCustomdrawMyList( NMHDR* pNMHDR, LRESULT* pResult ); 

2.在cpp文件中添加消息映射:ON_NOTIFY(NM_CUSTOMDRAW, IDC_LIST, OnCustomdrawMyList)

3.函数的实现:

void CXXX::OnCustomdrawMyList( NMHDR* pNMHDR, LRESULT* pResult )
{
 NMLVCUSTOMDRAW* pLVCD = reinterpret_cast<NMLVCUSTOMDRAW*>( pNMHDR );
 
    // Take the default processing unless we set this to something else below.
    *pResult = 0;
 
    // First thing - check the draw stage. If it's the control's prepaint
    // stage, then tell Windows we want messages for every item.
    if ( CDDS_PREPAINT == pLVCD->nmcd.dwDrawStage )
 {
        *pResult = CDRF_NOTIFYITEMDRAW;
 }
 
 // This is the notification message for an item. We'll request
 // notifications before each subitem's prepaint stage.
 else if ( pLVCD->nmcd.dwDrawStage==CDDS_ITEMPREPAINT )
 {
  COLORREF m_clrText;
  int   nItem = static_cast<int> (pLVCD->nmcd.dwItemSpec);
  
  // 根据文本内容判断使ListCtrl不同颜色现实的条件
  CString str = m_list.GetItemText(nItem ,0);
  if (str == "0")
  {
   m_clrText = RGB(12,26,234);
  }
  else if (str == "1")
  {
   m_clrText = RGB(0,0,0);
  }
  else
  {
   m_clrText = RGB(255, 0, 0);
  }
  pLVCD->clrText = m_clrText;
  *pResult = CDRF_DODEFAULT;
 }
}

ListCtrl控件着色 - Fly - 从C开始
 
 
 
 
 
目录
相关文章
|
Java Linux 开发工具
OpenOffice4: 软件包安装, Docker安装,集成SpringBoot应用
OpenOffice4: 软件包安装, Docker安装,集成SpringBoot应用
OpenOffice4: 软件包安装, Docker安装,集成SpringBoot应用
|
JavaScript Java 测试技术
基于微信小程序的高校党费收缴系统的设计与实现(源码+lw+部署文档+讲解等)
基于微信小程序的高校党费收缴系统的设计与实现(源码+lw+部署文档+讲解等)
171 0
|
存储 数据可视化 架构师
【数据建模】什么是数据建模?
数据建模是分析和定义业务收集和生成的所有不同数据以及这些数据之间的关系的过程。数据建模概念在业务中使用数据时创建数据的可视化表示,而流程本身是理解和澄清数据需求的练习。
|
机器学习/深度学习 人工智能 自然语言处理
巧用ChatGPT高效搞定Excel数据分析
随着人工智能技术的不断发展,越来越多的企业开始将其应用于办公场景,以提高员工的工作效率。而在众多办公软件中,Excel无疑是最常用的一款。然而,传统的Excel数据分析方法往往耗时且容易出错。
1212 0
|
开发者
关于Win11系统PC连上WiFi后能正常使用各大App,但浏览器无法正常上网访问之详细解决办法
我个人近期遇到了一个问题,正如标题所说“关于Win11系统PC连上WiFi后能正常使用各大App,但浏览器无法正常上网访问”,这个bug困扰过不少开发者,今天来简单分享一下解决办法
1834 1
|
存储 弹性计算 固态存储
给大家算一下阿里云500G服务器多少钱?
租用一个500G存储大小的云服务器一个月多少钱?只计算500G系统盘价格,如果仅仅是为了存储,对象存储OSS会更划算
1330 0
给大家算一下阿里云500G服务器多少钱?
|
机器学习/深度学习 算法 固态存储
坦克装甲车辆目标检测技术研究现状介绍
与传统的图像处理识别技术相比,基于深度学习的目标识别技术,具有更为强大的适应性,并已在多个领域取得了较好的识别效果。在军事领域,由于存在地面战场环境复杂性和目标人为伪装等因素的影响,以及存在很多需要对较远目标识别的情况,而这些目标在识别过程中由于距离因素导致图像目标尺寸变得很小,增加了目标识别的难度。
1312 0
|
算法 云栖大会
|
消息中间件 Kubernetes Cloud Native
基于 RocketMQ+Knative 驱动云原生Serverless 应用
想必大家都比较了解 RocketMQ 消息服务,那么RocketMQ 与 Serverless 结合会碰撞怎样的火花呢?那我们今天介绍一下如何基于 RocketMQ + Knative 驱动云原生 Serverless 应用 。
3903 0
|
物联网 数据可视化 API
使用IoT Studio经济高效地完成物联网应用开发(含DEMO)
IoT Studio原Link Develop,是阿里云整合在应用开发领域的丰富经验倾力打造的一站式、低成本、高稳定、易定制的物联网生产力工具,旨在帮助用户经济高效的完成物联网应用开发。
15920 0