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

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

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

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