FAQ:WinAPI VCPP:закрасить фон окна CWnd — различия между версиями
Материал из Весельчак У
| Строка 4: | Строка 4: | ||
<br> | <br> | ||
| − | <pre> class CMyDialog : public CDialog | + | <pre>class CMyDialog : public CDialog |
| − | + | { | |
| − | + | // | |
| − | + | 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) | + | }</pre><pre>HBRUSH CMyDialog::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) |
{ | { | ||
| − | switch(nCtlColor) | + | switch(nCtlColor) |
| − | { | + | { |
| − | //CStatic-контрол | + | //CStatic-контрол |
| − | case WM_CTLCOLORSTATIC: | + | case WM_CTLCOLORSTATIC: |
| − | { | + | { |
| − | //у статиков делаем прозрачный фон | + | //у статиков делаем прозрачный фон |
| − | pDC->SetBkMode(TRANSPARENT); | + | pDC->SetBkMode(TRANSPARENT); |
| − | //и красный цвет текста | + | //и красный цвет текста |
| − | pDC->SetTextColor(RGB(255,0,0)); | + | pDC->SetTextColor(RGB(255,0,0)); |
| − | //надо же что-то вернуть :) | + | //надо же что-то вернуть :) |
| − | return (HBRUSH) (m_back_brush.m_hObject); | + | return (HBRUSH) (m_back_brush.m_hObject); |
| − | } | + | } |
| − | break; | + | 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); | ||
}</pre> | }</pre> | ||
<br> | <br> | ||
Версия 20:38, 3 октября 2008
Как закрасить фон окна CWnd?
Нужно добавить обработчик сообщения WM_CTLCOLOR
class CMyDialog : public CDialog
{
//
CBrush m_back_brush;
...
<span id="fck_dom_range_temp_1223055208671_173" /> ...
};
//конструктор
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);}