FAQ:WinAPI VCPP:закрасить фон окна CWnd — различия между версиями
Материал из Весельчак У
RXL (обсуждение | вклад) |
|||
| (не показано 5 промежуточных версий 2 участников) | |||
| Строка 1: | Строка 1: | ||
| − | === Как закрасить фон окна CWnd? | + | ===Как закрасить фон окна CWnd?=== |
| − | + | Нужно добавить обработчик сообщения WM_CTLCOLOR. | |
| − | < | + | <syntaxhighlight lang="cpp"> |
| − | + | class CMyDialog : public CDialog | |
{ | { | ||
| − | + | // | |
| − | + | CBrush m_back_brush; | |
| − | + | ... | |
| − | + | ... | |
}; | }; | ||
| Строка 15: | Строка 15: | ||
CMyDialog::CMyDialog(): CDialog(CMyDialog::IDD) | CMyDialog::CMyDialog(): CDialog(CMyDialog::IDD) | ||
{ | { | ||
| − | + | //создаём кисть фона | |
| − | + | m_back_brush.CreateSolidBrush(RGB(192,186,207)); | |
| − | }</ | + | } |
| − | + | </syntaxhighlight> | |
| − | + | <syntaxhighlight lang="cpp"> | |
| + | HBRUSH CMyDialog::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) | ||
{ | { | ||
| − | //CStatic-контрол | + | switch(nCtlColor) |
| + | { | ||
| + | //CStatic-контрол | ||
| + | case WM_CTLCOLORSTATIC: | ||
| + | { | ||
| + | //у статиков делаем прозрачный фон | ||
| + | pDC->SetBkMode(TRANSPARENT); | ||
| + | //и красный цвет текста | ||
| + | pDC->SetTextColor(RGB(255,0,0)); | ||
| − | + | //надо же что-то вернуть :) | |
| − | + | return (HBRUSH) (m_back_brush.m_hObject); | |
| − | + | } | |
| − | + | break; | |
| − | + | ||
| − | + | ||
| − | //надо же что-то вернуть :) | + | |
| − | return (HBRUSH) (m_back_brush.m_hObject); | + | |
| − | } | + | |
| − | 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); | ||
} | } | ||
| − | / | + | </syntaxhighlight> |
| − | + | ||
| − | + | ||
| − | + | [[Category:FAQ:WinAPI VCPP]] [[Category:FAQ:MFC]] | |
| − | + | ||
Текущая версия на 22:13, 3 октября 2009
Как закрасить фон окна 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); }