MFC CEdit disable时设置背景颜色
MFC作为一套非常老旧落后的框架,对于很多控件特效的支持还是非常有限,不少东西都要自己去手绘,做起来真的是太痛苦了。希望mfc跟ie一样,快快死掉。
今天又是一个奇怪的需求,要求输入框在disable时,背景颜色设置为白色。disable跟enable样式完全不做区分,UI设计也是人才。
CEdit没有提供SetBackgroundColor的接口,需要自己去绘制。
在DLG.cpp里,响应WM_CTLCOLOR
消息,在OnCtlColor
里添加代码:
if (nCtlColor == CTLCOLOR_STATIC)
{
switch (pWnd->GetDlgCtrlID())
{
case IDC_EDIT1:
{
HBRUSH hh = ::CreateSolidBrush(RGB(255, 255, 255));
return hh;
}
default:
break;
}
}
这里要注意的是,如果要改变enable时的文字颜色、背景颜色,用的不是CTLCOLOR_STATIC
而是CTLCOLOR_EDIT
,也就是这里困扰我很久,以为CEdit不能改变默认的灰色disable背景颜色。
看下效果,由于白色背景不太容易看出来,临时改成黄色:
最后要说的是,CEdit只能更改disable时的背景颜色,没法改变文字的颜色。如果有产品设计出这种玩意儿,我的建议是抽他两大耳光。