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

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

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


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


class CMyDialog : public CDialog
{
   //
   CBrush m_back_brush;
   ...
<span id="fck_dom_range_temp_1223055208671_173" />   ...
};

//конструктор
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);
}