带颜色文字的列表框

MFC 设置CListBox各行的字体、样式、颜色、行间距,并自动显示隐藏水平滚动条 派生修改CLIstBox实现对各行内容字体、样式、大小、颜色的分别设置,并实现水平滚动条自动显示隐藏的功能。 阅读详情
一个能显示带颜色文字的列表框类,类名是CColorListBox,它的基类是MFC类中的CListBox,它和类CListBox类不一样,它允许能在列表框中显示有颜色的文字,在该类中的addstring()和insertstring()就干这个的,比如你可以用下面的方法:

     m_clistbox.addstring("hey it's red!",RGB(255,0,0));
     m_clistbox.insertstring(index,"hi i'm green",RGB(0,255,0));

    它的使用是很简单的,你只需要用资源编辑器就够了。

    首先,在对话框中添加一个列表框,你得把对话框的属性该一下ower draw:选fixed。当然你的列表框中还应该有字符串(要不然怎么有带颜色的文字呢?)

    然后,还要把有关于这个类的头文件放到你的工程中去。还有下面的语句也是要注意的,

下面是一部分代码:

#include "colorlistbox.h"  // better be in stdafx.h 
#include "mydialog.h"

......

bool cmydialog::oninitdialog()
{
    cdialog::oninitdialog();

    // sublclass listbox so that our ccolorlistbox receives windows    events
    m_clistbox.subclassdlgitem(idc_clistbox, this); // idc_clistbox is the listbox's resource id

    .....
}
  下面是头文件和那个CPP文件,全部代码如下:

//以下是头文件
#if !defined(AFX_COLORLISTBOX_H__5529A6B1_584A_11D2_A41A_006097BD277B__INCLUDED_)
#define AFX_COLORLISTBOX_H__5529A6B1_584A_11D2_A41A_006097BD277B__INCLUDED_

#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000

//*************************************************************
// ColorListBox.h : header file
//
// MFC ListBox with optional color
// 
// Version: 1.0    01/10/1998 (c)Patrice Godard
//
//**************************************************************

/////////////////////////////////////////////////////////////////////////////
// CColorListBox window

class CColorListBox : public CListBox
{
// Construction
public:
    CColorListBox();

// Attributes
public:

// Operations
public:
    int AddString( LPCTSTR lpszItem);
    int AddString( LPCTSTR lpszItem, COLORREF rgb);
    int InsertString( int nIndex, LPCTSTR lpszItem, COLORREF rgb);
// Overrides
    // ClassWizard generated virtual function overrides
    //{{AFX_VIRTUAL(CColorListBox)
    public:
    virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
    //}}AFX_VIRTUAL

// Implementation
public:
    virtual ~CColorListBox();

    // Generated message map functions
protected:
    //{{AFX_MSG(CColorListBox)
    //}}AFX_MSG

    DECLARE_MESSAGE_MAP()
};

/////////////////////////////////////////////////////////////////////////////

//{{AFX_INSERT_LOCATION}}
// Microsoft Developer Studio will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_COLORLISTBOX_H__5529A6B1_584A_11D2_A41A_006097BD277B__INCLUDED_)

//以下是实现文件
//*************************************************************
// ColorListBox.cpp : implementation file
//
// MFC ListBox with optional color
// 
// Version: 1.0    01/10/1998 (c)Patrice Godard
//
//**************************************************************

#include "ColorListBox.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CColorListBox

CColorListBox::CColorListBox()
{
}

CColorListBox::~CColorListBox()
{
}


BEGIN_MESSAGE_MAP(CColorListBox, CListBox)
    //{{AFX_MSG_MAP(CColorListBox)
    //}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CColorListBox message handlers



void CColorListBox::DrawItem(LPDRAWITEMSTRUCT lpdis) 
{
    if (lpdis->itemID < 0)
        return; 

    COLORREF cvText;
    COLORREF cvBack;
    CString itemString;

    if ((lpdis->itemState & ODS_SELECTED) &&    // if item has been selected
        (lpdis->itemAction & (ODA_SELECT | ODA_DRAWENTIRE)))
            DrawFocusRect(lpdis->hDC, &lpdis->rcItem); 
    

    if (!(lpdis->itemState & ODS_SELECTED) &&    // if item has been deselected
        (lpdis->itemAction & ODA_SELECT))
            DrawFocusRect(lpdis->hDC, &lpdis->rcItem); 
    

    if(lpdis->itemData)        // if color information is present
            cvText = SetTextColor(lpdis->hDC, lpdis->itemData);
        else     // if no color information, use default system colors
            cvText = SetTextColor(lpdis->hDC, GetSysColor((lpdis->itemState & ODS_SELECTED)
        ? COLOR_HIGHLIGHTTEXT : COLOR_WINDOWTEXT)); 
    
    // always use system colors for background
    cvBack = SetBkColor(lpdis->hDC, GetSysColor((lpdis->itemState & ODS_SELECTED)
        ? COLOR_HIGHLIGHT : COLOR_WINDOW)); 

    // get and display item text
    GetText(lpdis->itemID, itemString );
    DrawText(lpdis->hDC, itemString, -1, &lpdis->rcItem, DT_LEFT | DT_SINGLELINE);

    // restore DC colors
    SetTextColor(lpdis->hDC, cvText); 
    SetBkColor(lpdis->hDC, cvBack); 
}


//***********************************************
// original AddString() method
//
// purpose: Add a string to the listbox
//
// parameters: 
//        lpszItem: pointer to item text
//
// remarks:
//        provided because CListBox::AddString is 
//        NOT virtual
//
// return:    item index
//***********************************************
int CColorListBox::AddString( LPCTSTR lpszItem)
{
    return ((CListBox*)this)->AddString(lpszItem);
}


//***********************************************
// new AddString() method
//
// purpose: Add a string to the listbox
//
// parameters: 
//        lpszItem: pointer to item text
//             rgb: text color as a COLORREF
//
// return:    item index
//***********************************************
int CColorListBox::AddString( LPCTSTR lpszItem,COLORREF rgb )
{
    int item = AddString(lpszItem);
    if(item >=0)
        SetItemData(item,rgb);
    return item;
}


//***********************************************
// new InsertString() method
//
// purpose: Insert a string to the listbox
//
// parameters: 
//          nIndex: index of inserted item
//        lpszItem: pointer to item text
//             rgb: text color as a COLORREF
//
// return:    item index
//***********************************************
int CColorListBox::InsertString( int nIndex, LPCTSTR lpszItem, COLORREF rgb)
{
    int item = ((CListBox*)this)->InsertString(nIndex,lpszItem);
    if(item >=0)
        SetItemData(item,rgb);
    return item;

}

    译完于2001年9月12号。我希望这能起到抛砖引玉的作用,有技术的读者能把它给扩展了。


CListBox中设置文本的颜色(字体) 这个主要是用vc开发的一个文本颜色的CListBox控件, 添加一个颜色处理类,并继承CListBox,然后添加颜色控件的变量,在addString(文本,rgb),就完成了,就这么简单,代码运行可以看到结果! 立即下载

相关推荐

clistbox根据情况改变字体颜色

Vc++实例.根据情况在插入时改变字体颜色,在VC++环境下通过。可以根据需要自己设置字体的颜色。内附有说明。

VC++中的MFC控件ListBox颜色操作攻略,点击按钮对话框输出颜色不同的文本

新建这个类的原因是因为系统自带的CListBox类中的AddString函数中只有一个对文本进行操作的参数,并不能改变文本颜色,所以需要在CColorListBox中重写AddString函数,增加改变颜色的参数,使其同时也能对文本颜色进行操作。在对话框中加入系统自带的消息响应函数HBRUSH CListBoxTestDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor),可以通过与ID号的绑定来改变静态文本的颜色,如静态文本提示内容Tips。

weixin_45960869的博客 2015

MFC 实现ListBox每行颜色的改变

MFC 实现ListBox每行颜色的改变,按照网上的方法而来。

vs2010设置CListBox字体颜色

VS2010中使用多文档模式动态创建CListBox模块输出结果,为了方便改变每一行的字体颜色,参考了CColorListBox类的封装,在添加了virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);重载函数后发现该函数并没有被调用,查其原因是因为在创建输出模块时没有添加 LBS_OWNERDRAWVARIABLE | LBS_HASST

Wolf的专栏 3341

MFC ClistBox 根据需求指定输出字符串颜色

MFC ClistBox 根据需求指定输出字符串颜色。可以在输出到listbox时候进行颜色的设置。

CListBox改变指定行颜色

VS2010 CListBox改变指定行的颜色

设置列表框指定行的文字颜色

1 list.setCellRenderer(new MyRenderer(new int[] {2,3}, Color.RED)); //设置列表框的第2行和第3行文字颜色为红色 2 3 class MyRenderer extends DefaultListCellRenderer { 4 5 private Fon...

dinggujiao8462的博客 586

MFC的CListCtrl列表颜色变化

实现CListCtrl的行颜色设置,还有某行某列颜色设置!

在C#中控制ListBox某一行的字体颜色

插入数据后调用 listBox1.SelectedIndex=listBox1.Items.Count-1; 可以将列表框自动滚动到底部。 例1 private void Form1_Load(object sender, EventArgs e) { listBox1.Items.Add("红色"); listBox1.Items.Add("黄色");...

Andrewniu的博客 5933

告别LM2596!用LM5175打造400W自动升降压数控电源(附完整电路图与代码)

本文详细介绍了如何利用LM5175芯片设计400W自动升降压数控电源,替代传统的LM2596方案。通过四开关Buck-Boost拓扑结构,LM5175实现了高达98%的转换效率和400W大功率输出,支持无缝升降压切换。文章涵盖芯片选型、电路设计、PCB布局及STM32数控实现,为工程师提供完整的实践指南。

weixin_27032989的博客 598

基于MATLAB的最大重叠离散小波变换(MODWT)算法详解

最大重叠离散小波变换(Maximal Overlap Discrete Wavelet Transform, MODWT)是DWT的重要改进形式,由Percival和Walden等人在20世纪90年代系统提出并完善。MODWT通过消除下采样操作,采用样本平移不变的分解方式,解决了DWT的多个固有缺陷。MODWT的核心创新在于取消下采样环节。与DWT每级分解后对滤波输出进行二分下采样不同,MODWT在每一级都使用相同的滤波器,但通过插入零值的方式调整滤波器系数,保持每级系数数量与原始信号相同。

qq_42212808的博客 115

详细解析列表框的基本使用

书籍:《Visual C++ 2017从入门到精通》的2.3.8 Win32控件编程环境:visual studio 2022内容:【例2.22】列表框的基本使用说明:以下内容大部分来自腾讯元宝。

felicity_one的博客 952

华为OD新系统真题-最小极差分组(C/C++/Py/Java/Js/Go)

华为OD机试 新系统真题【最小极差分组】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【最小极差分组】多语言题解。

qq_45776114的博客 588

列表框与组合框

  列表框是窗口类名为"ListBox"的预定义子窗口,在窗口矩形内包含有一些可以滚动显示的栏状字符串列表。标准的列表框只能允许选中一个条目,选中的条目将以系统颜色COLOR_HIGHLIGHT高亮显示。Windows还提供了多种不同风格的标准列表框,其中包括多选列表框、多列显示的列表框和可以显示图象的拥有者画(Owner-draw)列表框等。另一种与列表框相关的控件是组合框,该控件预定义类名为"

2639

Sigrity Power SI 3D-EM Full Wave Extraction模式如何进行S参数提取和观测3D电磁场和远场实例分析(一)-差分过孔结构

Sigrity Power SI 3D-EM Full Wave Extraction模式如何进行S参数提取和观测3D电磁场和远场操作指导(一)详细介绍了3D-EM Full Wave Extraction全波S参数提取,下面以一个差分过孔结构进行实例分析,以下图为例。模式如何进行S参数提取和观测3D电磁场和远场实例分析(一)-差分过孔结构。是一个简单的4层板,top换层到bottom层的差分过孔结构。起始频率为100Mhz,截止频率为20Ghz,线性扫描。上面那根曲线是插损,下面那根线是回损。

weixin_54787054的博客 343

1、VMware vSphere 全面指南:从入门到精通

本文全面介绍了VMware vSphere从入门到精通的完整知识体系,涵盖基础概念、环境适配、部署规划、安装配置、网络与存储准备、虚拟机创建与管理、资源组织、事件监控、巡检流程、主机配置文件管理、资源池优化、高可用性与容错应用,以及故障排除方法。结合实用工具和部署技巧,帮助读者系统掌握vSphere的核心功能与运维实践,提升虚拟化环境的稳定性与管理效率。

pz890123的博客 94

Python tkinter -- 第14章 列表框(Listbox)属性

第14章 列表框(Listbox) 列表框控件显示多行文本,用户可以选中一行或者多行。所有的文本只能使用一种字体,不能混合使用多种字体。

weixin_42272768的博客 1万+

基于语义分割的实时建图:HDMap动态更新

基于语义分割的实时建图:HDMap动态更新​ ,人工智能,计算机视觉,大模型,AI,本文围绕基于语义分割的实时建图技术在HDMap动态更新中的应用展开,介绍了语义分割基础、HDMap概述、相关实时建图技术、动态更新关键技术、系统性能评估指标、实际应用案例、面临的挑战与解决方案及未来发展趋势。阐述了该技术如何利用传感器数据和语义分割算法,解决传统HDMap构建与更新的弊端,分析了其在精度、实时性、鲁棒性等方面的表现,以及在自动驾驶和智能交通中的应用,还探讨了现存问题及未来优化方向。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 22万+

Axure上拉列表框

拉一个矩形,改变其大小、颜色、边框。 拉一个形状,改变其大小、颜色。 拉一个列表框,选中列表框,双击列表框,添加多个。 选中矩形,双击鼠标单击时,点击显示,选中列表框,动画设置为向上滑动。 点击旋转,选中形状,旋转为绝对定位、角度180%、顺时针方向、中心描点、动画设置线性,点击确定。 选中列表框,点击隐藏,双击选项改变时,点击设置文字,选中矩形,点击“fx”。 点击添加局部变量,设置备选项为列表框。 点击“插入变量或函数”,跳出选项栏,点击局部变量中的“LVAR1”。

hxhx11的博客 1935

YOLOv8 智能交通违章检测 - 机动车道占用(违停/非机动车占道)详解

本文提出基于YOLOv8的智能交通违章检测方案,主要针对机动车道占用问题。系统整合目标检测、目标跟踪和ROI区域判定,实现两种典型场景检测:违章停车(静止超时)和非机动车/行人占道。详细介绍了系统架构、配置文件设计、核心逻辑实现及可视化模块,包括ROI区域管理、状态跟踪和违章判定算法。针对实际应用中的堵车误判、非机动车误报等问题,提出了密度检测、轨迹分析和自适应阈值等优化策略。该方案计算量适中,适合边缘设备部署,并建议配套开发ROI标定工具和证据链保存功能。

u010117029的博客 236

单板电源设计(LDO、DC/DC)

高速电路设计的电源架构 在电路设计中,一块单板往往涉及多种电源,常见的如5V/3.3V/2.5V/1.8V/1.5V/1.2V/1V0.9V/0.75V等,如此多种类的电源不可能都直接通过背板从电源板获得。一般,单板仅有一种或者两种输入电源,如48V或12V,再由它们产生单板上器件所需要的电源。 单板如何由输入电源生成所需电源,常见有两种架构:集中式电源架构和分布式电源架构。 ...

sinat_15677011的博客 8330

C++ListControl颜色控制

1. 在头文件中加入 afx_msg void OnCustomdrawList ( NMHDR* pNMHDR, LRESULT* pResult ); 2.在源文件中BEGIN_MESSAGE_MAP()  END_MESSAGE_MAP()中间加入 ON_NOTIFY (NM_CUSTOMDRAW,IDC_LIST, OnCustomdrawList) NM_CUSTOMDRAW 为

南方小小生 的博客 1967

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

上一篇: 为CListBox加上智能水平滚动条
下一篇: 职场好人缘的26个细节
普通网友
博客等级 码龄22年 1万+粉丝 3156原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值