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