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

先看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. 开发函数计算的正确姿势———为 PHP 运行时添加自定义扩展
  2. 产品经理做市场调研和数据分析的方法
  3. vue-source的实例
  4. California Fault Lines: Understanding the Causes and Impact of Network Failures
  5. ASP.NET2.0应用中定制安全凭证之理论篇
  6. java使用smtp发送邮件问题
  7. Linux-目录和文件管理(二)
  8. 大数据应用需要注意什么问题
  9. 算法笔记--卢卡斯定理
  10. Java关键字protected详解
  11. 对计算机病毒防治最科学的方法是,计算机病毒防治(复习-3
  12. 千套多行业多样式单页多页中英文简历模板(自荐信,简历封面,求职),共630M
  13. Gale-Shapley算法(基于python3.6)
  14. 教你制作高逼格的技术分享Keynote(PPT)
  15. 论文阅读:FVQA: Fact-based Visual Question Answering
  16. Spring实战第五章idea复现
  17. Java农历(阴历)工具类
  18. 热门的智慧养老产品有哪些?解读新政策后的超全资料整合
  19. php学生考勤管理毕业设计源码080900
  20. 视频教程-Python数据分析与案例教程:分析人口普查数据-Python

热门文章

  1. 编辑距离:字符串的海明距离
  2. 中国现如今的蜂蜜真假口头语
  3. bzoj 5308: [Zjoi2018]胖
  4. 番茄小说发布2022原创年度报告,入驻作者人数上涨300%,65%为90后作者
  5. 主机安全各个方面应该怎么做?
  6. 【Linux】Linux之DNS查询、设置及测试可用性
  7. JavaScript的函数与构造函数
  8. Java岗开发3年,公司临时抽查算法,离职后这几题我记一辈子,java面试经验技巧
  9. SI3933在汽车PKE车钥匙的应用方案
  10. Windows 重装系统,配置 WSL,美化终端,部署 WebDAV 服务器,并备份系统分区