Loading

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时的背景颜色,没法改变文字的颜色。如果有产品设计出这种玩意儿,我的建议是抽他两大耳光。

posted @ 2022-12-25 23:30  柴承训  阅读(240)  评论(0编辑  收藏  举报