首页 > 代码库 > 关于WM_CTLCOLOREDIT的处理的一些问题
关于WM_CTLCOLOREDIT的处理的一些问题
在为duilib封装系统控件的过程中, 再一次遇到了系统EDIT控件文字颜色/文字背景颜色的处理问题. 不要小看这个消息, 她很可能不会让你如愿以偿.
其实我要的目的很简单:
1. 改变文字颜色
2. 改变文字背景颜色
下面列举我遇到的几种可以说成是有点奇葩的现象
不自动刷新其余部分背景
代码:
static HBRUSH hbr;SetTextColor(HDC(wParam), RGB(0,255,0));if(!hbr) hbr = CreateSolidBrush(RGB(255,0,0));return LRESULT(hbr);
效果:
看似正常, 实际不正常
代码:
static HBRUSH hbr;SetTextColor(HDC(wParam), RGB(0,255,0));SetBkMode(HDC(wParam), TRANSPARENT);if(!hbr) hbr = CreateSolidBrush(RGB(255,0,0));return LRESULT(hbr);
效果:
BUG:
当尝试删除某些文本内容时会出现无法删除!(光标移动了,但内容还在)
当内容增多, 出现滚动条后, 并尝试拖动滚动条时:
正确的处理方式
实际上, 一开始我把文本颜色/文本背景/背景画刷搞混淆了, 所以才会出现各种堪称奇葩的效果.
根据 Paint problem when handling WM_CTLCOLOREDIT 的回答, 不能使用 SetBkMode 来设置透明!
设置文字颜色:
SetTextColor
设置文字背景颜色:
SetBkColor
设置没有文字的区域的背景画刷颜色:
返回画刷句柄
测试代码:
static HBRUSH hbr;SetTextColor(HDC(wParam), RGB(0,255,0));SetBkColor(HDC(wParam), RGB(150,0,0));if(!hbr) hbr = CreateSolidBrush(RGB(150,0,0));return LRESULT(hbr);
女孩不哭 @ cnblogs.com/memset @ 2014-06-24
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。