设置LISTControl控件某一行的背景和文字颜色

定义宏

用listcontrol的SetItemData设置某一行的属性,通过自定义属性标识实现。

自定义某行内容颜色属性:

#define COLOR_DEFAULT 0 //默认颜色
#define COLOR_RED 1 //红色
#define COLOR_BLUE 2 //蓝色

定义消息

调用BOOL SetItemData(In int nItem, In DWORD_PTR dwData);

其中nItem为某行位置,下标以0开始,dwData可为自定义颜色属性。

然后在LISTControl控件中的NM_CUSTOMDRAW事件中处理。

void CListControlExampleDlg::OnNMCustomdrawList1(NMHDR *pNMHDR, LRESULT *pResult)
{
    LPNMTVCUSTOMDRAW pNMCD = reinterpret_cast<LPNMTVCUSTOMDRAW>(pNMHDR);
    // TODO: 在此添加控件通知处理程序代码
    NMCUSTOMDRAW nmCustomDraw = pNMCD->nmcd;
    switch(nmCustomDraw.dwDrawStage)
    {
    case CDDS_ITEMPREPAINT:
        {
            if (COLOR_BLUE == nmCustomDraw.lItemlParam)
            {
                pNMCD->clrTextBk = RGB(51, 153, 255);
                pNMCD->clrText = RGB(255, 255, 255);
            }
            else if (COLOR_RED == nmCustomDraw.lItemlParam)
            {
                pNMCD->clrTextBk = RGB(255, 0, 0);      //背景颜色
                pNMCD->clrText = RGB(255, 255, 255);        //文字颜色
            }
            else if (COLOR_DEFAULT == nmCustomDraw.lItemlParam)
            {
                pNMCD->clrTextBk = RGB(255, 255, 255);
                pNMCD->clrText = RGB(0, 0, 0);
            }
            else
            {
                //
            }
            break;
        }
    default:
        {
            break;
        }
    }

    *pResult = 0;
    *pResult |= CDRF_NOTIFYPOSTPAINT;       //必须有,不然就没有效果
    *pResult |= CDRF_NOTIFYITEMDRAW;        //必须有,不然就没有效果
    return;
}

调用方法

void CListControlExampleDlg::OnBnClickedButton1()
{
    // TODO: 在此添加控件通知处理程序代码
    m_lstControl.SetItemData(0, COLOR_BLUE);
    m_lstControl.SetItemData(1, COLOR_DEFAULT);

    return;
}

void CListControlExampleDlg::OnBnClickedButton2()
{
    // TODO: 在此添加控件通知处理程序代码
    m_lstControl.SetItemData(0, COLOR_DEFAULT);
    m_lstControl.SetItemData(1, COLOR_RED);

    return;
}

参考

mfc中设置listcontrol某一行的背景和文字颜色

https://blog.csdn.net/langxm2006/article/details/76736153/

原文地址:https://www.cnblogs.com/17bdw/p/10356148.html

时间: 2024-10-12 09:57:40

设置LISTControl控件某一行的背景和文字颜色的相关文章

easyui表单多重验证,动态设置easyui控件

要实现的功能:在做添加学生信息的时候,利用easyui的验证功能判断 学号是否重复和学号只能为数字 最终效果如下图: 但在做这个的过程中,遇到了一系列的问题: 扩展validatebox的验证方法,最开始的验证代码如下: 1 //学号格式只能为数字 ****//这里没有问题**** 2 number: {//value值为文本框中的值 3 validator: function (value) { 4 var reg = /^[0-9]*$/; 5 return reg.test(value);

C#中设置TextBox控件中仅可以输入数字且设置上限

首先设置只可以输入数字: 首先设置TextBox控件的KeyPress事件:当用户按下的键盘的键不在数字位的话,就禁止输入 1 private void textBox1_KeyPress(object sender, KeyPressEventArgs e) 2 { 3 if (e.KeyChar != 8 && !Char.IsDigit(e.KeyChar))//如果不是输入数字就不让输入 4 { 5 e.Handled = true; 6 } 7 } 设置上限: 设置TextBox

五种情况下会刷新控件状态(刷新所有子FWinControls的显示)——从DFM读取数据时、新增加子控件时、重新创建当前控件的句柄时、设置父控件时、显示状态被改变时

五种情况下会刷新控件状态(刷新控件状态才能刷新所有子FWinControls的显示): 在TWinControls.PaintControls中,对所有FWinControls只是重绘了边框,而没有整个重绘这些FWinControl子控件.那么什么时候才整个重绘全部FWinControls呢?这时候,就不是一个单纯的WM_PAINT来解决控件重绘的问题了,而是这个TWinControl.UpdateShowing函数: procedure TWinControl.UpdateShowing; v

qt 设置程序控件样式

1. 以资源文件的形式设置控件样式QFiledata(QString(":/style.qss"));QStringqssFile;if(data.open(QFile::ReadOnly)){QTextStreamstyleIn(&data);qssFile=styleIn.readAll();data.close();qApp->setStyleSheet(qssFile);}qt 设置程序控件样式

VS2010/MFC设置对话框控件的Tab顺序

设置对话框控件的Tab顺序 前面几节为大家演示了加法计算器程序完整的编写过程,本节主要讲对话框上控件的Tab顺序如何调整. 上一讲为“计算”按钮添加了消息处理函数后,加法计算器已经能够进行浮点数的加法运算.但是还有个遗留的小问题,就是对话框控件的Tab顺序问题. 运行加法计算器程序,显示对话框后不进行任何操作,直接按回车,可以看到对话框退出了.这是因为“退出”按钮是Tab顺序为1的控件,也就是第一个接受用户输入的控件.但是按照我们的输入习惯,应该是被加数的编辑框首先接受用户输入,然后是加数编辑框

WPF后台设置xaml控件的样式System.Windows.Style

WPF后台设置xaml控件的样式System.Windows.Style 摘-自 :感谢 作者: IT小兵   http://3w.suchso.com/projecteac-tual/wpf-zhishi-houtai-shezhi-style.html Style myStyle = (Style)this.FindResource("TabItemStyle");//TabItemStyle 这个样式是引用的资源文件中的样式名称 静态资源在第一次编译后即确定其对象或值,之后不能对

C#设置一个控件可以鼠标拖动

C#设置一个控件可以鼠标拖动: 新建一个C#项目, 创建一个label控件, 设置label的鼠标按下和抬起事件分别为:label1_MouseDown和label1_MouseUp. 对代码进行如下修改. public partial class Form1 : Form { private Point mouse_offset; public Form1() { InitializeComponent(); } private void label1_MouseUp(object sende

Android控件TextProgressBar进度条上显文字

Android系统的进度条控件默认的设计的不是很周全,比如没有包含文字的显示,那么如何在Android进度条控件上显示文字呢? 来自Google内部的代码来了解下,主要使用的addView这样的方法通过覆盖一层Chronometer秒表控件来实现,整个代码如下 : public class TextProgressBar extends RelativeLayout implements OnChronometerTickListener { public static final String

android控件布局 ToggleButton按钮 图片和文字

ToggleButton控件具有checked属性对于要切换状态的功能按钮来说十分好用 这里以phone的开启DTMFTwelveKeyDialer的按钮为例 展示其效果和布局 activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" andro