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

Материал из Весельчак У
Перейти к: навигация, поиск
Строка 6: Строка 6:
 
<pre>class CMyDialog&nbsp;: public CDialog
 
<pre>class CMyDialog&nbsp;: public CDialog
 
{
 
{
  //
+
//
  CBrush m_back_brush;
+
CBrush m_back_brush;
  ...
+
...
  ...
+
...
 
};
 
};
  
Строка 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;
  
    //диалог
+
&nbsp;
    case WM_CTLCOLORDLG:
+
    {
+
        //возвращаем хендл кисти нужного фона
+
        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:40, 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);
}