Об изменении цвета фона окна "на лету".
От: Аноним  
Дата: 22.03.04 09:27
Оценка:
Этот вопрос затрагивался не так дано на этом форуме, но работающего решения предложено не было.

Итак, есть MFC-ное SDI-приложение. Его окно имеет цвет фона по умолчанию — белый. В некоторый момент надо изменить цвет фона. В MSDNе этот вопрос затрагивался в Q103786. Там рекомендовано для перегрузить функцию OnEraseBkgnd для потомков CWnd. Однако у меня это ничего не дает, — результат тот же самый. Я взял во этот код из заметки, но ожидаемого результата не получил:


BOOL CChildView::OnEraseBkgnd(CDC* pDC)
{
  // Set brush to desired background color
  CBrush backBrush(RGB(255, 128, 128));
  // 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;
}


Что я делаю не так?

Аналогично не дали результатов и попытки перегрузить OnCtlColor — как советовали в одном из ответов в предыдущем обсуждении. Исследования показали, что перегруженные функции (в обоих случаях) никогда не вызывались. Попытка внаглую переопределить CWnd::OnEraseBkgnd также не дает результатов.

Таким образом, вопрос остается открытым — как программно менять цвет фона окна MFC/SDI-приложения?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.