FAQ:WinAPI VCPP:закрасить фон окна CWnd

Материал из Весельчак У
Перейти к: навигация, поиск

Как закрасить фон окна CWnd?


Нужно добавить обработчик сообщения WM_CTLCOLOR 


class CMyDialog : public CDialog
{
 //
 CBrush m_back_brush;
 ...
 ...
};

//конструктор
CMyDialog::CMyDialog(): CDialog(CMyDialog::IDD)
{
 //создаём кисть фона
 m_back_brush.CreateSolidBrush(RGB(192,186,207));
}
HBRUSH CMyDialog::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)

{

switch(nCtlColor)
{
   //CStatic-контрол
   case WM_CTLCOLORSTATIC:
   {
      //у статиков делаем прозрачный фон
      pDC->SetBkMode(TRANSPARENT);
      //и красный цвет текста
      pDC->SetTextColor(RGB(255,0,0));
      //надо же что-то вернуть :)
      return (HBRUSH) (m_back_brush.m_hObject);
   }
   break;

 

//диалог
   case WM_CTLCOLORDLG:
   {
      //возвращаем хендл кисти нужного фона
      return (HBRUSH) (m_back_brush.m_hObject);
   }
   break;

} //фон по умолчанию

return CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
}