Шаг 312 - CWnd::OnCtlColor

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

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

Параметры
pDC
Содержит указатель на контекст дисплея для дочернего окна. Может быть временный.
pWnd
Содержит указатель на элемент управления просящий цвет. Может быть временный.
nCtlColor
Содержит одно из следующих значений, определяя тип элемента управления:

Замечания
Рамка вызывает эту функцию, когда порожденный элемент управление собирается быть выведенным. Большинство элементов управления посылает это сообщение их родителю (обычно диалоговое окно) чтобы готовить pDC для рисования элемента управления, использующего правильные цвета. Чтобы изменять цвет текста вызовите SetTextColor функцию с желательными красными, зелеными, и синими значениями (RGB).
Чтобы изменять фоновый цвет элемента редактирования для одиночной линтт установите дескриптор кисти в CTLCOLOR_EDIT и CTLCOLOR_MSGBOX кодах сообщения, и вызовите CDC::SetBkColor в ответ на CTLCOLOR_EDIT код.
OnCtlColor не будет запрашивать список поля с раскрывающимся списком, потому что раскрывающийся список фактически порожден из поля со списком и не порожденный из окна. Чтобы изменять цвет раскрывающегося списка, создайте CComboBox с перегрузкой OnCtlColor, который проверяет CTLCOLOR_LISTBOX в nCtlColor параметре. В этом драйвере, SetBkColor функция должна использоваться, чтобы установить фоновый цвет для текста.

Эта функция вызвана рамкой чтобы позволить Bашей прикладной программе обрабатывать сообщение Windows. Параметры переданные к Вашей функции отражают параметры полученные рамкой, когда сообщение было получено. Если Вы вызываете реализацию базового класса этой функции, та реализация использует параметры, первоначально переданные с сообщением, а не параметры которые Вы обеспечиваете функции.

Пример

// Класс  инициализирован и создал CBrush член с  именем m_brush.
// Элемент  управление будет окрашен с красным текстом и фоновым режимом
// цвет в  m_brush.

HBRUSH CZilchDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{
	// Вызвать реализацию базового класса сначала! Иначе, это может
	// Отменяют то, что мы пробуем выполнять здесь.
	HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

	// Мы окрашиваем элемент управление IDC_MYSTATIC? Мы можем использовать
	// CWND:: GetDlgCtrlID () чтобы выполнить наиболее эффективный тест.
	if (pWnd->GetDlgCtrlID() == IDC_MYSTATIC)
	{
		// Установите текстовый цвет к красному
		pDC->SetTextColor(RGB(255, 0, 0));

		// Установить фоновый режим для текста к ясному 
		// Так что фоновый режим покажется через.
		pDC->SetBkMode(TRANSPARENT);

		// Дескриптор возврата к нашему объекту CBrush
		hbr = m_brush;
	}

	return hbr;
}

Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 04.01.2002