Как вызвать сообщение WM_CTLCOLORSTATIC для управления LTEXT в c ++ - PullRequest
0 голосов
/ 02 ноября 2018

Я создал диалоговую форму для класса MFC, отредактировав файл .rc с помощью дизайнера форм следующим образом: enter image description here

Он принимается как LTEXT . Я хочу изменить цвет этого текста, используя WM_CTLCOLORSTATIC сообщение . Я использовал подкласс следующим образом:

HWND name_message = ::GetDlgItem(hwnd_, IDC_EDIT_OUTPUT_STRING);
g_EditTxtViewWndProc = (WNDPROC)(LONG_PTR)GetWindowLongPtr(name_message, GWLP_WNDPROC);
SetWindowLongPtr(name_message, GWLP_WNDPROC, (LONG_PTR)(EditTxtViewProc));

LRESULT CALLBACK
EditTxtViewProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) {

  static HBRUSH hBrush = CreateSolidBrush(RGB(255, 0, 0));

  switch( msg )
  {
      case WM_CTLCOLORSTATIC:
      {
        HDC hdC = (HDC)wp;
        SetTextColor(hdC, RGB(255, 0, 0));
        SetBkColor(hdC, RGB(255, 255, 255));
        return (INT_PTR)hBrush;
      }
   }
}

В приведенном выше случае он не вызывает сообщение WM_CTLCOLORSTATIC . Я новичок в программировании окон.

Может ли кто-нибудь помочь мне, как подкласс, как указано выше?

1 Ответ

0 голосов
/ 05 ноября 2018

Реми прав. Вам нужно использовать родительский wndproc для обработки этого сообщения.

Вы также можете напрямую использовать CWnd :: OnCtlColor. Большинство элементов управления отправляют это сообщение своим родителям (обычно это диалоговое окно), чтобы подготовить pDC для рисования элемента управления с использованием правильных цветов.

Подробнее см. В этом документе ниже.

https://msdn.microsoft.com/en-us/library/1xb05f0h.aspx?f=255&mspperror=-2147217396#Anchor_167

С наилучшими пожеланиями, Барон Би

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...