在为duilib封装系统控件的过程中, 再一次遇到了系统EDIT控件文字颜色/文字背景颜色的处理问题. 不要小看这个消息, 她很可能不会让你如愿以偿.

其实我要的目的很简单:

1. 改变文字颜色
                      2. 改变文字背景颜色

下面列举我遇到的几种可以说成是有点奇葩的现象

不自动刷新其余部分背景

代码:

static HBRUSH hbr;
SetTextColor(HDC(wParam), RGB(,,));
if(!hbr) hbr = CreateSolidBrush(RGB(,,));
return LRESULT(hbr);

效果:

看似正常, 实际不正常

代码:

static HBRUSH hbr;
SetTextColor(HDC(wParam), RGB(,,));
SetBkMode(HDC(wParam), TRANSPARENT);
if(!hbr) hbr = CreateSolidBrush(RGB(,,));
return LRESULT(hbr);

效果:

BUG:

当尝试删除某些文本内容时会出现无法删除!(光标移动了,但内容还在)

当内容增多, 出现滚动条后, 并尝试拖动滚动条时:

正确的处理方式

实际上, 一开始我把文本颜色/文本背景/背景画刷搞混淆了, 所以才会出现各种堪称奇葩的效果.

根据 Paint problem when handling WM_CTLCOLOREDIT 的回答, 不能使用 SetBkMode 来设置透明!

设置文字颜色:

SetTextColor

设置文字背景颜色: 
                      SetBkColor

设置没有文字的区域的背景画刷颜色:

返回画刷句柄

测试代码:

static HBRUSH hbr;
SetTextColor(HDC(wParam), RGB(,,));
SetBkColor(HDC(wParam), RGB(,,));
if(!hbr) hbr = CreateSolidBrush(RGB(,,));
return LRESULT(hbr);

女孩不哭 @ cnblogs.com/memset @ 2014-06-24

最新文章

  1. WINDOWS SERVER 2008 RD服务器搭建
  2. Implement strStr() [LeetCode]
  3. nodejs初探(四)实现一个多人聊天室
  4. hibernate学习五(关系映射多对一与一对多)
  5. 解决android3.0版本号以上应用接收不到开机广播问题
  6. Luogu P3390 【模板】矩阵快速幂
  7. Assignments
  8. Lucene实现索引和查询
  9. 从交叉熵损失到Facal Loss
  10. 八:Vue下的国际化处理
  11. docker 笔记
  12. 用Spring构建企业Java应用程序的方法
  13. vue-10-路由
  14. CSS3的新特性整理
  15. docker centos 老是退出
  16. Maven 的41种骨架功能介绍(转)
  17. [UE4]Canvas Panel
  18. Metabase在Windows下的开发环境配置
  19. 〖Linux〗Ubuntu14.04安装32位运行库
  20. cassandra运行出现了Unable to gossip with any seeds,cqlsh链接不上,提示connection refused处理办法

热门文章

  1. 神器Alfred使用
  2. squid 学习笔记
  3. JS自动格式化输入的数字/千位分隔符VIEW:858
  4. tcpdump 时报ServFail 0/0/1 (97)
  5. detours安装和使用
  6. zstu.4189: 逻辑运算(构建 && 前缀表达式入门)
  7. Zookeeper Invalid config, exiting abnormally
  8. 浅谈setTimeout函数和setInterval函数
  9. HDFS深入浅析
  10. git寻根——^和~的区别