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

Материал из Весельчак У
Перейти к: навигация, поиск
м FAQ:WinAPI, VCPP Part 2:Как закрасить фон окна CWnd» переименована в «WinAPI VCPP:закрасить фон окна CWnd»: Название статьи должно быть человеко-читаемым)
 
(не показаны 2 промежуточные версии этого же участника)
Строка 52: Строка 52:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
[[Category:FAQ:WinAPI VCPP]]
+
[[Category:FAQ:WinAPI VCPP]] [[Category:FAQ:MFC]]

Текущая версия на 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);
}