Воспользуемся проектом из шага "Шаг 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; // вернуть нашу кисть
}
Вот такое окно теперь будет.
Итак, мы объявляем функцию 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; // вернуть нашу кисть
}