上篇转载的效果不尽如人意,自己摸索了下。

先看MSDN中的CListBox::DrawItem代码 :

http://technet.microsoft.com/zh-cn/windowsserver/kc9hahtd(v=vs.80)

在 VC6 中新建MFC AppWized (exe) -> 选择 dialog based -> 完成。在dialog中插入一个ListBox控件(比如ID::IDC_LIST),打开ListBox属性,将 Styles 中的 Owner draw 改为 Fixed 或者 Variable,

将下面的 Has string 打钩。 为该ListBox新建一个类,基类选择CListBox (比如类名为 CMyListBox)。

用MFC ClassWized 给该类添加 DrawITem 函数,选择消息是选 =WM_DRAWITEM ,要选前面有等号的。

在CTextDlg类中新建一个 CMyListBox 的变量 (比如:m_myList)。

如果直接将MSDC中的 DrawItem 拷贝到 自己新建的类的 DrawItem 中;那么在将类的成员变量与控件关联的时候,也就是在CTextDlg类的 DoDataExchange 函数中添加:

DDX_Control(pDX, IDC_LIST, m_myList);

运行编译后的程序会崩溃,这时修改 DrawITem 为:

void CMyListBox::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{// TODO: Add your message handler code hereASSERT(lpDrawItemStruct->CtlType == ODT_LISTBOX);CDC dc;dc.Attach(lpDrawItemStruct->hDC);// Save these value to restore them when done drawing.COLORREF crOldTextColor = dc.GetTextColor();COLORREF crOldBkColor = dc.GetBkColor();// If this item is selected, set the background color // and the text color to appropriate values. Also, erase// rect by filling it with the background color.if ((lpDrawItemStruct->itemAction | ODA_SELECT) &&(lpDrawItemStruct->itemState & ODS_SELECTED)){dc.SetTextColor(::GetSysColor(COLOR_HIGHLIGHTTEXT));dc.SetBkColor(::GetSysColor(COLOR_HIGHLIGHT));dc.FillSolidRect(&lpDrawItemStruct->rcItem, ::GetSysColor(COLOR_HIGHLIGHT));}elsedc.FillSolidRect(&lpDrawItemStruct->rcItem, crOldBkColor);// If this item has the focus, draw a red frame around the// item's rect.if ((lpDrawItemStruct->itemAction | ODA_FOCUS) &&(lpDrawItemStruct->itemState & ODS_FOCUS)){CBrush br(RGB(255, 0, 0));dc.FrameRect(&lpDrawItemStruct->rcItem, &br);}if(lpDrawItemStruct->itemID != (UINT) -1){CString strItem;GetText(lpDrawItemStruct->itemID, strItem);// Draw the text.dc.DrawText(strItem,strlen(strItem),&lpDrawItemStruct->rcItem,DT_CENTER|DT_SINGLELINE|DT_VCENTER);// Reset the background color and the text color back to their// original values.dc.SetTextColor(crOldTextColor);dc.SetBkColor(crOldBkColor);  }dc.Detach();
}

这时程序就能正常运行了。

加几项数据后效果如下:

添加进来的项默认为黑色,想要修改,则可以在 最前面 之前加一句:

dc.SetTextColor(RGB(0,220,0));

RGB值自己设置就行了,如果要修改选中状态下的文字颜色、背景色 、边框颜色,则修改原来语句就行。

用 FrameRect 画出来的是实线框,可以改用 DrawFocusRect 画虚线框,我觉得不想要边框也可以去掉。

想让文字靠左显示则 DrawText 中的 DT_LEFT 改为 DT_CENTER。

设置后效果如图:(选中的文字颜色是红的,怎么传上来效果好差样)

这时觉得默认文字小了点,再改改。

先将每一项的高度增加点(一定要把 ListBox 属性 Styles 中的 Owner draw 改为  Variable,不然后面的修改没有效果)。

重载 MeasureItem 函数:

在CMyListBox类的头文件中加函数声明

virtual void MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct);

在cpp中添加实现

void CMyListBox::MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct)
{  lpMeasureItemStruct->itemHeight += 20; }

接着在 DrawItem 中修改字体,代码如下:

 if(lpDrawItemStruct->itemID != (UINT) -1){LOGFONT lf; memset(&lf, 0, sizeof(LOGFONT));dc.GetCurrentFont()->GetLogFont(&lf); CFont font, *pOldFont; lf.lfCharSet = DEFAULT_CHARSET ; lstrcpy(lf.lfFaceName,_T("宋体")); //选择字体lf.lfHeight = 22;          //设置字体高度lf.lfWidth = 0; lf.lfWeight = 700;        //设置为粗体font.CreateFontIndirect(&lf); pOldFont=dc.SelectObject(&font); CString strItem;GetText(lpDrawItemStruct->itemID, strItem);// Draw the text.dc.DrawText(strItem,strlen(strItem),&lpDrawItemStruct->rcItem,DT_LEFT |DT_SINGLELINE|DT_VCENTER);// Reset the background color and the text color back to their// original values.dc.SetTextColor(crOldTextColor);dc.SetBkColor(crOldBkColor);dc.SelectObject(pOldFont);}

然后编译运行,效果如下:

经过这么几步后,显示效果就不错了,至于加图片什么的,以后再研究吧。

改变ListBox中文本的颜色以及其他相关推荐

  1. iOS 改变字符串中数字的颜色

    匹配中文字符 [\u4e00-\u9fa5] 匹配双字节字符(包括汉字在内) [^\x00-\xff] 匹配网址:[a-zA-z]+://[^\s]* 匹配国内电话 \d{3}-\d{8}|\d{4} ...

  2. python tkinter text改变文本字体颜色_如何更改Tkinter中文本的颜色?

    在Tkinter图形用户界面中,我无法确定如何更改文本的颜色.我试着让Label1变成红色,Label2变成蓝色,Label3变成棕色,Label4变成黄色,但我似乎想不出来.提前谢谢:)import ...

  3. 改变PowerPoint2003中超链接的颜色

    今天在做ppt的时候,要使用到超链接,可是超链接的颜色和背景颜色太相近了,导致无法看清超链接文字内容,由于不想更换这个ppt模板,所以在网上找如何更改超链接颜色的帖子.发现PowerPoint2007 ...

  4. js中html标签变文字颜色,javascript – 更改contenteditable div中文本的颜色

    您可以使用HTML编辑API来处理此类用例.参考这里: https://dvcs.w3.org/hg/editing/raw-file/tip/editing.html 简而言之,使用execComm ...

  5. 怎样用好CorelDRAW中的位图颜色遮罩

    位图颜色遮罩命令可以将选择的颜色隐藏或显示,一般可用来抠图,这个颜色遮罩功能可以帮助您只改变选中的颜色而不改变图像中的其他颜色. 选中一张位图,执行"位图"→"位图颜色遮 ...

  6. 如何在HTML表格的td标签中添加字体颜色

    摘要:微信搜索[三桥君] 一.问题 如何改变表格中的字体颜色?改成如图红色字体. 二.方法 <td><font size="5" color="red& ...

  7. react-native 改变webview中字体颜色方式

    webvie怎样改变文字颜色 1 injectedJavaScript属性 设置 js 字符串,在网页加载之前注入的一段 JS 代码 2 在调用之前在html中已经设置好html标签中的颜色值,然后传 ...

  8. css可以设置文本框颜色吗,如何在css中设置文本框颜色

    如何在css中设置文本框颜色 发布时间:2021-04-29 15:33:54 来源:亿速云 阅读:72 作者:Leah 如何在css中设置文本框颜色?针对这个问题,这篇文章详细介绍了相对应的分析和解 ...

  9. 论如何改变csdn中字体的类型和大小以及颜色

    论如何改变csdn中字体的类型和大小以及颜色 csdn的简单了解 修改字体的类型 修改字体的大小 修改字体的颜色 csdn的简单了解 Markdown是一种可以使用普通文本编辑器编写的标记语言,通过类 ...

最新文章

  1. element ui 图片控件 排序_Element-ui上传图片后隐藏上存控件
  2. linux虚拟网络设备--eth, tap/tun, veth-pair(九)
  3. 物理机实时监控UI之grafana(SimpleJson)+gRPC
  4. 中台唯一的胜利果实:大数据中台架构详解
  5. Python学习day07 - Python进阶(1) 内置方法
  6. ProFile配置节属serializeAs
  7. Java网络编程从入门到精通(25):创建ServerSocket对象
  8. Windows2000资源工具包工具对于管理任务2
  9. 360安全卫士怎么打开加速球
  10. c语言gga字符串校验和代码,NEMA-0183(GPGGA,GPRMC,GPGSA,GPGSV,GPVTG)详解,并附解析代码(C语言版)...
  11. LaunchAnywhere载入Java VM时windows出现错误:2以及216
  12. python樱桃小丸子_appium+python自动化启动app
  13. 流程自动化(RPA)的发展和应用
  14. 测试当前访问百度的IP地址(代理IP)
  15. outlook邮箱pc/mac客户端下载 含最新版
  16. VS code 显示中文异常解决办法
  17. Kubernetes(k8s)之Service(服务)
  18. 创业如创作,保持热爱
  19. 重磅!详解阿里研究院互联网+报告
  20. MagicBox 20150701

热门文章

  1. 基于自然语言生成技术的语义理解:实现智能对话和自动摘要的核心技术
  2. 网页提交,点击浏览器返回按钮,网页出错
  3. python wxpy_wxpy: 用 Python 玩微信【转】
  4. 唯样商城:六种方式教你辨别芯片真伪
  5. 锂电池基础知识01——锂聚合物电池燃烧实验
  6. topaz全家桶_看看你还缺哪个?摄影后期必备插件全家桶齐了!AI视频无损放大...
  7. ECharts绘制图例动态变化的柱状图
  8. 使用CHtml::encode直接使用模型的数据进行显示
  9. Vue中使用 watermark-dom 添加水印
  10. 访问学者在国外生活的注意事项有哪些?