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

Материал из Весельчак У
Перейти к: навигация, поиск
 
(не показано 10 промежуточных версий 2 участников)
Строка 1: Строка 1:
=== Как закрасить фон окна CWnd? ===
+
===Как закрасить фон окна CWnd?===
  
<br>Нужно добавить обработчик сообщения WM_CTLCOLOR&nbsp;
+
Нужно добавить обработчик сообщения WM_CTLCOLOR.
  
<br>
+
<syntaxhighlight lang="cpp">
<pre>class CMyDialog&nbsp;: public CDialog
+
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)
+
}
 +
</syntaxhighlight>
 +
 
 +
<syntaxhighlight lang="cpp">
 +
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;:)
+
 
        return (HBRUSH) (m_back_brush.m_hObject);
+
//надо же что-то вернуть&nbsp;:)
      }
+
return (HBRUSH) (m_back_brush.m_hObject);
      break;
+
}
 +
break;
 +
 
 +
//диалог
 +
case WM_CTLCOLORDLG:
 +
{
 +
//возвращаем хендл кисти нужного фона
 +
return (HBRUSH) (m_back_brush.m_hObject);
 +
}
 +
break;
 +
}
  
      //диалог
+
//фон по умолчанию
      case WM_CTLCOLORDLG:
+
return CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
      {
+
}
        //возвращаем хендл кисти нужного фона
+
</syntaxhighlight>
        return (HBRUSH) (m_back_brush.m_hObject);
+
      }
+
      break;
+
  }
+
  
  //фон по умолчанию
+
[[Category:FAQ:WinAPI VCPP]] [[Category:FAQ:MFC]]
  return CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
+
}</pre>
+
<br>
+

Текущая версия на 22:13, 3 октября 2009

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

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

class CMyDialog&nbsp;: 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-&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);
}