Этот вопрос затрагивался не так дано на этом форуме, но работающего решения предложено не было.
Итак, есть 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-приложения?