前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >设置CListCtrl单元格的颜色

设置CListCtrl单元格的颜色

作者头像
全栈程序员站长
发布于 2022-09-09 12:58:34
发布于 2022-09-09 12:58:34
92100
代码可运行
举报
运行总次数:0
代码可运行

大家好,又见面了,我是你们的朋友全栈君。

pragma once

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// CListCtrlCl

class CListCtrlCl : public CListCtrl
{
    DECLARE_DYNAMIC(CListCtrlCl)

public:
    CListCtrlCl();
    virtual ~CListCtrlCl();

protected:
    DECLARE_MESSAGE_MAP()
    virtual void PreSubclassWindow();
public:
    virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);

public:
    afx_msg void OnMeasureItem(int nIDCtl, LPMEASUREITEMSTRUCT lpMeasureItemStruct);
    void MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct);

public:
    CPtrList m_ptrListCol;  //保存列颜色
    CPtrList m_ptrListItem; //保存Item颜色表
    CPtrList m_colTextColor; //保存列字体颜色
    CPtrList m_ItemTextColor; //保存单元格字体颜色

    bool FindColColor(int col ,COLORREF &color); //查找列颜色
    bool FindItemColor(int col,int row,COLORREF &color);
    void SetColColor(int col,COLORREF color);  //设置列颜色
    void SetItemColor(int col,int row,COLORREF color); //设置Item颜色
    void SetColTextColor(int col,COLORREF color);   //设置列文本颜色
    void SetItemTextColor(int col,int row,COLORREF color);

    COLORREF m_color;
    BOOL SetTextColor(COLORREF cr);
public:
    // 字体高度
    int m_fontHeight;
    // 字体宽度
    int m_fontWith;
};

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// ListCtrlCl.cpp : 实现文件
//

#include "stdafx.h"
#include "TestCtrlList.h"
#include "ListCtrlCl.h"

struct stColor
{
    int nRow;
    int nCol;
    COLORREF rgb;
};
// CListCtrlCl

IMPLEMENT_DYNAMIC(CListCtrlCl, CListCtrl)

CListCtrlCl::CListCtrlCl()

:m_fontHeight(12)
, m_fontWith(0)
{
    m_color = RGB(0,0,0);
}

CListCtrlCl::~CListCtrlCl()
{
}


BEGIN_MESSAGE_MAP(CListCtrlCl, CListCtrl)
    ON_WM_MEASUREITEM()
    ON_WM_MEASUREITEM_REFLECT()
END_MESSAGE_MAP()

// CListCtrlCl 消息处理程序

void CListCtrlCl::PreSubclassWindow()
{
    // TODO: 在此添加专用代码和/或调用基类
    ModifyStyle(0,LVS_OWNERDRAWFIXED);
    CListCtrl::PreSubclassWindow();
}

void CListCtrlCl::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
    // TODO: 添加您的代码以绘制指定项
    TCHAR lpBuffer[256];
    LV_ITEM lvi;

    lvi.mask = LVIF_TEXT | LVIF_PARAM ;
    lvi.iItem = lpDrawItemStruct->itemID ; 
    lvi.iSubItem = 0;
    lvi.pszText = lpBuffer ;
    lvi.cchTextMax = sizeof(lpBuffer);
    VERIFY(GetItem(&lvi));

    LV_COLUMN lvc, lvcprev ;
    ::ZeroMemory(&lvc, sizeof(lvc));
    ::ZeroMemory(&lvcprev, sizeof(lvcprev));
    lvc.mask = LVCF_WIDTH | LVCF_FMT;
    lvcprev.mask = LVCF_WIDTH | LVCF_FMT;

    CDC* pDC;
    pDC = CDC::FromHandle(lpDrawItemStruct->hDC);
    CRect rtClient;
    GetClientRect(&rtClient);
    for ( int nCol=0; GetColumn(nCol, &lvc); nCol++)
    {
        if ( nCol > 0 ) 
        {
            // Get Previous Column Width in order to move the next display item
            GetColumn(nCol-1, &lvcprev) ;
            lpDrawItemStruct->rcItem.left += lvcprev.cx ;
            lpDrawItemStruct->rcItem.right += lpDrawItemStruct->rcItem.left; 
        }

        CRect rcItem;   
        if (!GetSubItemRect(lpDrawItemStruct->itemID,nCol,LVIR_LABEL,rcItem))   
            continue;   

        ::ZeroMemory(&lvi, sizeof(lvi));
        lvi.iItem = lpDrawItemStruct->itemID;
        lvi.mask = LVIF_TEXT | LVIF_PARAM;
        lvi.iSubItem = nCol;
        lvi.pszText = lpBuffer;
        lvi.cchTextMax = sizeof(lpBuffer);
        VERIFY(GetItem(&lvi));
        CRect rcTemp;
        rcTemp = rcItem;

        if (nCol==0)
        {
            rcTemp.left -=2;
        }

        if ( lpDrawItemStruct->itemState & ODS_SELECTED )
        {
            pDC->FillSolidRect(&rcTemp, GetSysColor(COLOR_HIGHLIGHT)) ;
            pDC->SetTextColor(GetSysColor(COLOR_HIGHLIGHTTEXT)) ;
        }
        else
        {
            COLORREF color;
            color = GetBkColor();
            pDC->FillSolidRect(rcTemp,color);

            if (FindColColor(nCol,color))
            {
                pDC->FillSolidRect(rcTemp,color);
            }

            if (FindItemColor(nCol,lpDrawItemStruct->itemID,color))
            {
                pDC->FillSolidRect(rcTemp,color);
            }           
        }
        pDC->SelectObject(GetStockObject(DEFAULT_GUI_FONT));
        UINT   uFormat    = DT_LEFT ;       
        TEXTMETRIC metric;
        pDC->GetTextMetrics(&metric);
        int ofst;
        ofst = rcItem.Height() - metric.tmHeight;
        rcItem.OffsetRect(0,ofst/2);
        pDC->SetTextColor(m_color);

        CFont nFont ,* nOldFont; 
        nFont.CreateFont(m_fontHeight,m_fontWith,0,0,0,FALSE,FALSE,0,0,0,0,0,0,_TEXT("宋体"));//创建字体 
        nOldFont = pDC->SelectObject(&nFont);
        DrawText(lpDrawItemStruct->hDC, lpBuffer, strlen(lpBuffer), &rcItem, uFormat) ;
        pDC->SelectStockObject(SYSTEM_FONT) ;
    }
}

void CListCtrlCl::OnMeasureItem(int nIDCtl, LPMEASUREITEMSTRUCT lpMeasureItemStruct)
{
    // TODO: 在此添加消息处理程序代码和/或调用默认值

    CListCtrl::OnMeasureItem(nIDCtl, lpMeasureItemStruct);
}
void CListCtrlCl::MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct)
{

}

bool CListCtrlCl::FindColColor(int col,COLORREF &color) //查找列颜色
{
    int flag = 0;
    for (POSITION pos = m_ptrListCol.GetHeadPosition();pos!=NULL;)
    {
        stColor *pColor = (stColor*)m_ptrListCol.GetNext(pos);
        if (pColor->nCol==col)
        {
            flag = 1;
            color = pColor->rgb;
            break;
        }
    }
    if (1==flag)
    {
        return true;
    }
    return false;
}

bool CListCtrlCl::FindItemColor(int col,int row,COLORREF &color) //查找颜色
{
    int flag = 0;
    for (POSITION pos = m_ptrListItem.GetHeadPosition();pos!=NULL;)
    {
        stColor *pColor = (stColor*)m_ptrListItem.GetNext(pos);
        if (pColor->nCol==col&&pColor->nRow==row)
        {
            flag = 1;
            color = pColor->rgb;
            break;
        }
    }
    if (1==flag)
    {
        return true;
    }
    return false;
}

void CListCtrlCl::SetColColor(int col,COLORREF color) //设置列颜色
{
    stColor *pColor  = new stColor;
    pColor->nCol = col;
    pColor->rgb = color;
    m_ptrListCol.AddTail(pColor);
}

void CListCtrlCl::SetItemColor(int col,int row,COLORREF color) //设置格子颜色
{
    stColor *pColor  = new stColor;
    pColor->nCol = col;
    pColor->nRow = row;
    pColor->rgb = color;
    m_ptrListItem.AddTail(pColor);
}

BOOL CListCtrlCl::SetTextColor(COLORREF cr)  //设置字体颜色
{
    m_color = cr;
    return TRUE;
}

void CListCtrlCl::SetColTextColor(int col,COLORREF color)
{
    stColor *pColor = new stColor;
    pColor->nCol = col;
    pColor->rgb = color;
    m_colTextColor.AddTail(pColor);
}


void CListCtrlCl::SetItemTextColor(int col,int row,COLORREF color)
{
    stColor *pColor = new stColor;
    pColor->nCol = col;
    pColor->nRow = row;
    pColor->rgb = color;
    m_ItemTextColor.AddTail(pColor);
}

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/152481.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
Python和Scala里的闭包
在函数式编程里,闭包(closure)是绕不过的话题,它的实现基础来源于变量作用域和一等函数。也正是因为如此,我们可以进一步把代码块抽象,Python也诞生了装饰器。
哒呵呵
2018/08/06
8700
Scala语法笔记
JAVA中,举例你S是一个字符串,那么s(i)就是该字符串的第i个字符(s.charAt(i)).Scala中使用apply的方法
用户3003813
2018/09/06
1.3K0
Scala语法笔记
scala与java之间的那些事
  scala与java之间的关系,我认为可以用一句话来开头:scala来源于java,但又高于java。   scala的设计者Martin Odersky就是一个JAVA控,这位牛人设计了javac和编写了jdk中的通用代码。可以说java语言本身就是Martin Odersky一步一步看着长大的。所以scala可以说打根起就和JAVA有着远远悠长的血缘关系。   Martin Odersky还在写java那会,就立志开发达成一个目标:让写程序这样一个基础工作变得高效、简单、且令人愉悦!因此可以说sca
随机来个数
2018/04/16
9760
Scala专题系列(九) : Scala函数式编程
普通一个函数是输入一个参数输出一个返回值,而带有副作用的函数不仅仅返回一个值,还带有其它的操作:
用户5252199
2022/04/18
4150
Python和Scala的一等函数
函数指的是执行某个任务或者是一系列的指令被组织成的一片代码块。标准的数学意义上的函数指的是输入集合和输出集合的一种对应关系。
哒呵呵
2018/08/06
6430
Python和Scala的一等函数
Spark 累加器与广播变量
在 Spark 中,提供了两种类型的共享变量:累加器 (accumulator) 与广播变量 (broadcast variable):
每天进步一点点
2022/07/27
7930
Spark 累加器与广播变量
Scala学习笔记
大数据框架(处理海量数据/处理实时流式数据) 一:以hadoop2.X为体系的海量数据处理框架         离线数据分析,往往分析的是N+1的数据         - Mapreduce             并行计算,分而治之             - HDFS(分布式存储数据)             - Yarn(分布式资源管理和任务调度)             缺点:                 磁盘,依赖性太高(io)                 shuffle过程,map将数据写入到本次磁盘,reduce通过网络的方式将map task任务产生到HDFS         - Hive 数据仓库的工具             底层调用Mapreduce             impala         - Sqoop             桥梁:RDBMS(关系型数据库)- > HDFS/Hive                   HDFS/Hive -> RDBMS(关系型数据库)         - HBASE             列式Nosql数据库,大数据的分布式数据库  二:以Storm为体系的实时流式处理框架         Jstorm(Java编写)         实时数据分析 -》进行实时分析         应用场景:             电商平台: 双11大屏             实时交通监控             导航系统  三:以Spark为体系的数据处理框架         基于内存            将数据的中间结果放入到内存中(2014年递交给Apache,国内四年时间发展的非常好)         核心编程:             Spark Core:RDD(弹性分布式数据集),类似于Mapreduce             Spark SQL:Hive             Spark Streaming:Storm         高级编程:             机器学习、深度学习、人工智能             SparkGraphx             SparkMLlib             Spark on R Flink
曼路
2018/10/18
2.6K0
Scala基础——高阶函数
在非函数式编程语言里,函数的定义包含了“函数类型”和“值”两种层面的内容。但是,在函数式编程中,函数是“头等公民”,可以像任何其他数据类型一样被传递和操作,也就是说,函数的使用方式和其他数据类型的使用方式完全一致了。这时,我们就可以像定义变量那样去定义一个函数,由此导致的结果是,函数也会和其他变量一样,开始有“值”。就像变量的“类型”和“值”是分开的两个概念一样,函数式编程中,函数的“类型”和“值”也成为两个分开的概念,函数的“值”,就是“函数字面量”。 整数字面量
羊羽shine
2019/08/09
4070
Scala | 教程 | 学习手册 --- 首类函数
函数式编程的核心就是函数应当是首类的。首类表示函数不仅能得到声明和调用,还可以作为一个数据类型用在这个语言的任何地方。
曲奇
2021/12/14
4110
Scala的函数
前文已经提到Scala变量的用法,现在聊聊函数。在Scala里,函数的定义很简单。例如:
哒呵呵
2018/12/18
4510
Scala 闭包(九)
在 multiplier 中有两个变量:i 和 factor。其中的一个 i 是函数的形式参数,在 multiplier 函数被调用时,i 被赋予一个新的值。然而,factor不是形式参数,而是自由变量,考虑下面代码:
王知无-import_bigdata
2019/03/15
3540
scala(七) 函数式编程补充
说明: 没有名字的函数就是匿名函数,可以直接通过函数字面量(λ表达式)来设置匿名函数,函数字面量定义格式如下。
用户1483438
2022/04/13
2980
Spark基础-scala学习(四、函数式编程)
函数式编程 将函数赋值给变量 匿名函数 高阶函数 高级函数的类型推断 scala的常用高阶函数 闭包 sam转换 currying函数 return 将函数赋值给变量 scala中的函数是一等公民,可以独立定义,独立存在,而且可以直接将函数作为值赋值给变量 scala> def sayHello(name:String){println("Hello, "+name)} sayHello: (name: String)Unit scala> sayHello("tom") Hello, tom scal
老梁
2019/09/10
8050
关于闭包
        首先说明下...闭包是js高级特性之一...但并非js独有...perl, python, php(5.3以上版本) 都是支持闭包的..
Java架构师必看
2021/03/22
2K0
Scala | 教程 | 学习手册 --- 常用集合
所有集合的根是Iterator,它提供了一组公共方法,可以用来迭代处理和管理集合数据。
曲奇
2021/12/14
6020
Scala | 教程 | 学习手册 --- 常用集合
快速学习-Scala函数式编程
在scala中,函数式编程和面向对象编程融合在一起,学习函数式编程式需要oop的知识,同样学习oop需要函数式编程的基础。[矛盾] 关系如下图:
cwl_java
2020/02/27
9400
快速学习-Scala函数式编程
Scala之偏函数Partial Function
http://blog.csdn.net/bluishglc/article/details/50995939 从使用case语句构造匿名函数谈起 在Scala里,我们可以使用case语句来创建一个匿名函数(函数字面量),这有别于一般的匿名函数创建方法。来看个例子: scala> List(1,2,3) map {case i:Int=>i+1} res1: List[Int] = List(2, 3, 4) 这很有趣,case i:Int=>i+1 构建的匿名函数等同于(i:Int)=>i+1 ,也
Albert陈凯
2018/04/04
9770
Scala 高阶(九):Scala中的模式匹配
本次主要分享Scala中关于模式匹配的内容,Scala中的模式匹配类似于Java中的switch语法,但是Scala在基于Java的思想上补充了特有的功能。
百思不得小赵
2022/12/01
1.6K0
Scala的基础概念
例如:调用 def Add(y:Int) = x + y 其结果为xy之和,并且调用之后没有引起x值的变换,没有副作用 所以,Add函数没有副作用
ZONGLYN
2019/08/08
7560
Kotlin中的函数
函数还可以用中缀表示法调用,当他们是成员函数或扩展函数,只有一个参数,用 infix关键字标注
deep_sadness
2018/08/30
2.4K0
相关推荐
Python和Scala里的闭包
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档