FAQ:WinAPI VCPP:закрасить фон окна CWnd — различия между версиями

Материал из Весельчак У
Перейти к: навигация, поиск
Строка 9: Строка 9:
 
   CBrush m_back_brush;
 
   CBrush m_back_brush;
 
   ...
 
   ...
<span id="fck_dom_range_temp_1223055208671_173" />  ...
+
  ...
 
};
 
};
  
Строка 19: Строка 19:
 
}</pre><pre>HBRUSH CMyDialog::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
 
}</pre><pre>HBRUSH CMyDialog::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
 
{
 
{
  switch(nCtlColor)
 
  {
 
      //CStatic-контрол
 
      case WM_CTLCOLORSTATIC:
 
      {
 
        //у статиков делаем прозрачный фон
 
        pDC-&gt;SetBkMode(TRANSPARENT);
 
        //и красный цвет текста
 
        pDC-&gt;SetTextColor(RGB(255,0,0));
 
        //надо же что-то вернуть&nbsp;:)
 
        return (HBRUSH) (m_back_brush.m_hObject);
 
      }
 
      break;
 
  
      //диалог
+
  switch(nCtlColor)
      case WM_CTLCOLORDLG:
+
  {
      {
+
    //CStatic-контрол
        //возвращаем хендл кисти нужного фона
+
    case WM_CTLCOLORSTATIC:
        return (HBRUSH) (m_back_brush.m_hObject);
+
    {
      }
+
        //у статиков делаем прозрачный фон
      break;
+
        pDC-&gt;SetBkMode(TRANSPARENT);
  }
+
        //и красный цвет текста
 +
        pDC-&gt;SetTextColor(RGB(255,0,0));
 +
        //надо же что-то вернуть&nbsp;:)
 +
        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);
  
  //фон по умолчанию
 
  return CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
 
 
}</pre>
 
}</pre>
 
<br>
 
<br>

Версия 20:39, 3 октября 2008

Как закрасить фон окна 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);
}