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

Материал из Весельчак У
Перейти к: навигация, поиск
Строка 20: Строка 20:
 
{
 
{
  
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);
+
 
 +
return CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
 
}</pre>
 
}</pre>
 
<br>
 
<br>

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

}