码迷,mamicode.com
首页 > 其他好文 > 详细

关于WM_CTLCOLOREDIT的处理的一些问题

时间:2014-06-25 12:10:24      阅读:374      评论:0      收藏:0      [点我收藏+]

标签:style   class   blog   code   http   tar   

        在为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);


效果:
bubuko.com,布布扣

 

看似正常, 实际不正常

代码:

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);

效果:
bubuko.com,布布扣

BUG:
当尝试删除某些文本内容时会出现无法删除!(光标移动了,但内容还在)
bubuko.com,布布扣
当内容增多, 出现滚动条后, 并尝试拖动滚动条时:
bubuko.com,布布扣

 

正确的处理方式

实际上, 一开始我把文本颜色/文本背景/背景画刷搞混淆了, 所以才会出现各种堪称奇葩的效果.
根据 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

关于WM_CTLCOLOREDIT的处理的一些问题,布布扣,bubuko.com

关于WM_CTLCOLOREDIT的处理的一些问题

标签:style   class   blog   code   http   tar   

原文地址:http://www.cnblogs.com/memset/p/handling_wm_ctlcoloredit.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!