如何使用MFC更改禁用编辑框中的文本颜色?

时间:2010-06-18 15:48:39

标签: winapi visual-c++ mfc cedit

我有一个对话框,其中禁用了编辑框,但文本应显示为红色而不是默认灰色。我尝试了以下方法:

void CMyEdit::OnEnable(BOOL bEnable)
{
  CEdit::OnEnable(bEnable);

  if (bEnable)
  {
    m_BackGroundColor = kRGBWhite;
  }
  else
  {
    m_BackGroundColor = kRGBDefaultGray;
  }

  m_TextColor = kRGBRed;
  m_BackgroundBrush.DeleteObject();
  m_BackgroundBrush.CreateSolidBrush(m_BackGroundColor);

  Invalidate();
}

但它仍然只显示灰色的文字。但是如果删除基类调用CEdit::OnEnable(bEnable);,则新文本颜色生效。任何人都可以解释代码中的错误吗?

感谢您的时间。

...欢呼声

编辑:将我的评论移至编辑)抱歉,我忘记在原帖中提及。处理ON_WM_CTLCOLOR_REFLECT()而不是处理ON_WM_CTLCOLOR()。我不明白的是删除对基类的调用,将文本的颜色更改为指定的颜色,但保持仅将其更改为默认灰色。

2 个答案:

答案 0 :(得分:2)

MSDN:非只读或禁用的编辑控件会在即将绘制控件时将WM_CTLCOLOREDIT消息发送到其父窗口。

推论是除了子类化它并自己做绘画之外,没有办法改变禁用(或只读)编辑框的背景或文本颜色。

答案 1 :(得分:1)

您需要处理OnCtlColor处理程序,并在您的消息地图中添加此ON_WM_CTLCOLOR()

afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
 //logic here, change pDC as needed, return brush to use
}