Как изменить цвет текста в отключенном окне редактирования с помощью MFC? - PullRequest
0 голосов
/ 18 июня 2010

У меня есть диалоговое окно, в котором поле редактирования отключено, но текст должен отображаться красным цветом, а не серым по умолчанию.Я попробовал следующее:

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 ().Чего я не понимаю, так это того, что при удалении вызова базового класса цвет текста меняется на указанный, но при сохранении его цвет меняется только на серый по умолчанию.

Ответы [ 2 ]

2 голосов
/ 23 января 2011

MSDN: элемент управления , недоступный только для чтения или отключенный , отправляет сообщение WM_CTLCOLOREDIT в родительское окно, когда элемент управления должен быть нарисован.

Следствие естьнет способа изменить фон или цвет текста отключенного (или только для чтения) поля редактирования, кроме как создать его подкласс и сделать рисование самостоятельно.

1 голос
/ 18 июня 2010

Вам нужно обработать обработчик OnCtlColor , и в вашей карте сообщений поставить этот ON_WM_CTLCOLOR()

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