0

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

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(),而是处理 ON_WM_CTLCOLOR_REFLECT()。我不明白的是,删除对基类的调用会将文本的颜色更改为指定的颜色,但保留它只会将其更改为默认灰色。

4

2 回答 2

2

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

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

于 2011-01-23T16:13:25.860 回答
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
}
于 2010-06-18T15:53:51.043 回答