Re[7]: Об изменении цвета фона окна "на лету".
От: Аноним  
Дата: 22.03.04 15:03
Оценка:
Здравствуйте, korzhik, Вы писали:

K>Здравствуйте, <Аноним>, Вы писали:


K>1. Создаю визардом MFC/SDI проект без поддержки Doc/View.

K>2. Переопределяю метод OnEraseBkgnd для моего класса CChildView производного от CWnd следующим образом:
K>
K>BOOL CChildView::OnEraseBkgnd(CDC* pDC)
K>{
K>  CBrush backBrush(RGB(0, 128, 128));
K>  CBrush* pOldBrush = pDC->SelectObject(&backBrush);
K>  CRect rect;
  pDC->>GetClipBox(&rect);    
  pDC->>PatBlt(rect.left, rect.top, rect.Width(), rect.Height(), PATCOPY);
  pDC->>SelectObject(pOldBrush);
K>  return TRUE;
K>}
K>

K>Опять всё работает. Что опять же логично.
У меня не работает. Делаю вот так:

Вот мое определение класса CChildView


class CChildView : public CWnd
{
// Construction
public:
    CChildView();

// Attributes
public:

// Operations
public:

// Overrides
    // ClassWizard generated virtual function overrides
    //{{AFX_VIRTUAL(CChildView)
    protected:
    virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
    //}}AFX_VIRTUAL

// Implementation
public:
    virtual ~CChildView();


    // Generated message map functions
protected:
    //{{AFX_MSG(CChildView)
    afx_msg void OnPaint();
  afx_msg BOOL OnEraseBkgnd(CDC* pDC);
    //}}AFX_MSG
    DECLARE_MESSAGE_MAP()
};


Вот описание функции CChildView::OnEraseBkgnd:

BOOL CChildView::OnEraseBkgnd(CDC* pDC)
{
// Set brush to desired background color
  CBrush backBrush(RGB(0, 255, 255));

// Save old brush
  CBrush* pOldBrush = pDC->SelectObject(&backBrush);

  CRect rect;
  pDC->GetClipBox(&rect);     // Erase the area needed

  pDC->PatBlt(rect.left, rect.top, rect.Width(), rect.Height(), PATCOPY);
  pDC->SelectObject(pOldBrush);
  return TRUE;
}


Не работает. Фон окна остается белым. При попытке привязать class wizard'ом сообщение WM_ERASEBKGND к функции CChildView::OnEraseBkgnd вижу, что оное сообщение отсутствует в списке доступных для привязывания. Что я делаю не так? У меня VS6SP5.

Всего.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.