Шаг 48 - Цвет фона диалогового окна

Создание проекта

Воспользуемся проектом из шага "Шаг 45 - Печать из диалогового окна".

Создаем код

Новая функция и класс в диалоговом окне.

class CTestDlg : public CDialog	// класс диалогового окна
{
................
BOOL OnInitDialog(); // функция настроки
afx_msg HBRUSH OnCtlColor( CDC* pDC, CWnd* pWnd, UINT nCtlColor ); // получение кисти
CBrush my_color; // сама кисть

protected:
........
};

Добавления к таблице окликов.

BEGIN_MESSAGE_MAP(CTestDlg, CDialog)
ON_BN_CLICKED(IDC_BUTTON1, OnSend)
ON_WM_CTLCOLOR() // требуется кисть
END_MESSAGE_MAP()

Изменение инициализации диалогового окна.

BOOL CTestDlg::OnInitDialog()
{
..................
pSysMenu->AppendMenu(MF_STRING, IDM_MYMENU, "MyMenu"); // добавить наш пункт.
}
my_color.CreateSolidBrush(RGB(0, 255, 155)); // создать кисть
return TRUE;
}

Реализация.

HBRUSH CTestDlg::OnCtlColor( CDC* pDC, CWnd* pWnd, UINT nCtlColor )
{
return my_color; // вернуть нашу кисть
}

Вот такое окно теперь будет.

48_1.gif (2302 b)

Описание

Итак, мы объявляем функцию OnCtlColor, которая возвращает кисть для покраски окна. Объявили и класс кисти, которая будет использоваться для покраски окна. Когда окну (в данном случае диалоговому) необходимо произвести закраску себя, то оно для получения стиля закраски обращается к OnCtlColor. Но для реализации данной возможности нам необходимо описать в таблице откликов реакцию на событие закраски окна. Эта реакция реализуется описанием события ON_WM_CTLCOLOR(). Дальше мы реализуем функцию возвращая класс кисти. А вот в функции инициализации диалогового окна мы и создаем цвет покраски. Запускайте, Ваше окно должно стать зеленым.

Шпаргалка

Объяви в таблице откликов реакцию на сообщение о запросе кисти.

BEGIN_MESSAGE_MAP(CTestDlg, CDialog)
.........
ON_WM_CTLCOLOR() // требуется кисть
END_MESSAGE_MAP()

Создай функцию соответствующею этому сообщению.

class CTestDlg : public CDialog	// класс диалогового окна
{
................
afx_msg HBRUSH OnCtlColor( CDC* pDC, CWnd* pWnd, UINT nCtlColor ); // получение кисти
........
};

Реализуй ее.

HBRUSH CTestDlg::OnCtlColor( CDC* pDC, CWnd* pWnd, UINT nCtlColor )
{
return my_color; // вернуть нашу кисть
}

Загрузить проект | Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 08.10.99 (обновлено 11.07.2001)