Поделиться через


CWnd::OnCtlColor

Платформа вызывает функцию этот функцию-член, если дочерний элемент управления будет выписанным.

afx_msg HBRUSH OnCtlColor( 
   CDC* pDC, 
   CWnd* pWnd, 
   UINT nCtlColor  
);

Параметры

  • pDC
    Содержит указатель на контекст отображения для дочернего окна. Может быть временны.

  • pWnd
    Содержит указатель к элементу управления с запросом цвет. Может быть временны.

  • nCtlColor
    Содержит одно из следующих значений, указав тип элемента управления:

    • Элемент управления "Кнопка"CTLCOLOR_BTN

    • Диалоговое окно CTLCOLOR_DLG

    • Элемент управления "Поле ввода"CTLCOLOR_EDIT

    • Элемент управления списка CTLCOLOR_LISTBOX

    • Окно сообщения CTLCOLOR_MSGBOX

    • Элемент управления "полоса прокрутки"CTLCOLOR_SCROLLBAR

    • Статический элемент управления CTLCOLOR_STATIC

Возвращаемое значение

OnCtlColor должно возвратить дескриптор к кисти, которая должна использоваться для рисования фона элемента управления.

Заметки

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

Чтобы изменить цвет текста, вызовите функцию-член SetTextColor с пожеланными красного, зеленого и голубыми значениями (RGB).

Изменение цвета фона однострокового элемента управления "Поле ввода", установить дескриптор кисти и кодах сообщения CTLCOLOR_EDIT и CTLCOLOR_MSGBOX и вызвать функцию CDC::SetBkColor в ответ на код CTLCOLOR_EDIT.

OnCtlColor не будет вызываются для списка в поле со списком, поскольку фактически дочерний элемент раскрывающегося списка в поле со списком и не является дочерним элементом окна. Чтобы изменить цвет раскрывающийся список, создайте CComboBox с преодолением переопределения OnCtlColor, проверяет CTLCOLOR_LISTBOX в параметре nCtlColor. В этом обработчике функции-члена SetBkColor должен использоваться, чтобы задать цвет фона текста.

Примечание

Это функция-член вызывается платформой, чтобы разрешить приложению обработать сообщение Windows.Параметры, передаваемые функции отражают параметры, получаемые платформой, когда сообщение было получено.При вызове реализации базового класса этой функции, то эта реализация будет использовать параметры изначально, переданные с сообщением, а не параметры указываются в функции.Добавьте следующий метод к классу диалогового окна, используйте панель свойств Visual Studio для добавления обработчика сообщений для WM_CTLCOLOR.Кроме того, можно вручную добавить запись ON_WM_CTLCOLOR() для сопоставления сообщений.

Пример

// This OnCtlColor handler will change the color of a static control 
// with the ID of IDC_MYSTATIC. The code assumes that the CPenWidthsDlg 
// class has an initialized and created CBrush member named m_brush. 
// The control will be painted with red text and a background 
// color of m_brush.
HBRUSH CPenWidthsDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
   // Call the base class implementation first! Otherwise, it may 
   // undo what we're trying to accomplish here.
   HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

   // Are we painting the IDC_MYSTATIC control? We can use 
   // CWnd::GetDlgCtrlID() to perform the most efficient test. 
   if (pWnd->GetDlgCtrlID() == IDC_MYSTATIC)
   {
      // Set the text color to red
      pDC->SetTextColor(RGB(255, 0, 0));

      // Set the background mode for text to transparent  
      // so background will show thru.
      pDC->SetBkMode(TRANSPARENT);

      // Return handle to our CBrush object
      hbr = m_brush;
   }

   return hbr;
}

Требования

Header: afxwin.h

См. также

Ссылки

Класс CWnd

Диаграмма иерархии

CDC::SetBkColor