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

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

Версия 20:45, 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); }