设置CListCtrl单元格的颜色

设置CListCtrl单元格的颜色pragmaonce//CListCtrlClclassCListCtrlCl:publicCListCtrl{DECLARE_DYNAMIC(CListCtrlCl)public:CListCtrlCl();virtual~CListCtrlCl();protected:DECLARE_MESSAGE_MAP()virtualvo

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

pragma once

// 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;
};

// 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.net/152481.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 大数据平台数据脱敏介绍

    大数据平台数据脱敏介绍数据脱敏(DataMasking),又称数据漂白、数据去隐私化或数据变形。百度百科对数据脱敏的定义为:指对某些敏感信息通过脱敏规则进行数据的变形,实现敏感隐私数据的可靠保护。这样,就可以在开发、测试和其它非生产环境以及外包环境中安全地使用脱敏后的真实数据集。可以看到数据脱敏具有几个关键点:敏感数据、脱敏规则、使用环境。敏感数据,又称隐私数据,常见的敏感数据有:姓名、身

    2022年6月21日
    24
  • 物联网的体系架构概述[通俗易懂]

    物联网的体系架构概述[通俗易懂]物联网物联网有别于互联网,互联网的主要目的是构建一个全球性的信息通信网络,而物联网则侧重信息服务,即利用互联网、无线通信等进行业务信息的传送,服务对象由人转变为包括人在内的所有物品。物联网作为互联网的延伸,通过将智能物件整合到数字世界,面向用户提供个性化和私有化服务。物联网的体系架构应包括如下内涵:网络体系架构、技术与标准体系、资源与标识体系、产业与应用体系、服务与安全体系。(图)USNUSN体系架构是由韩国电子与通信技术研究所在2007年瑞士日内网召开的ITU下一代网络全球标准化会议(NUN-U

    2025年11月23日
    0
  • idea2021.8永久激活码_在线激活

    (idea2021.8永久激活码)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

    2022年3月22日
    53
  • vim中保存退出命令_linux保存并退出vim

    vim中保存退出命令_linux保存并退出vim命令 简单说明 :w 保存编辑后的文件内容,但不退出vim编辑器。这个命令的作用是把内存缓冲区中的数据写到启动vim时指定的文件中。 :w! 强制写文件,即强制覆盖原有文件。如果原有文件的访问权限不允许写入文件,例如,原有的文件为只读文件,则可使用这个命令强制写入。但是,这种命令用法仅当用户是文件的属主时才适用,而超级用户则不受此限制。 :wq 保存文件…

    2022年8月24日
    23
  • pycharm远程部署_pycharm怎么连接服务器

    pycharm远程部署_pycharm怎么连接服务器1.选择远程python解释器File->Settings->Project->PythonInterpreter点击+号其中Host是服务器的固定IPUsername是服务器上创建的自己的用户名(注意在服务器上创建用户的时候,记住用户名和密码)Next,Next,因为服务器中会安装多个Python环境,在Interpreter中可以指定不同的虚拟环境。在Linux中,通常在/data和/home中都会创建自己用户名的文件夹,虚拟环境由于占内存较多,通常存储在/d

    2022年8月29日
    4
  • 台式机dp接口在哪(主机没有dp接口怎么办)

    导读:成就3471和战99,均为品牌成套机,价格4千元左右,是否值得入手?请往下看:戴尔(DELL)成就3471:1、硬件点评下:主板:小型机箱,主板接口很丰富,M2.0的Pic-E接口,sata接口也有预留,内存槽也可以加内存,PIC16槽也可以扩充显卡,但机箱过小,需要额外注意;DDR4接口,海力士8G2666HMZ内存办公够用;电源:没挖到官方数据,但考虑显卡不好扩容,我们基本上可以忽略…

    2022年4月13日
    643

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号