Здравствуйте, korzhik, Вы писали:
K>1. Создаю визардом MFC/SDI проект.
Да. Простейший проект MFC/SDI без Doc/View.
K>2. Переопределяю метод OnEraseBkgnd для моего класса представления производного от CView следующим образом:
Я забыл сказать, что у меня Doc/View не используется. Соответсвенно, нет классов, производных от CView.
У меня есть следующие классы:
class CBgcolormfcApp : public CWinApp;
class CMainFrame : public CFrameWnd;
class CChildView : public CWnd;
В точности воспроизвожу заданный код. Кстати, classWizard позволяет мне добавить обработчик сообщения WM_ERASEBKGND только для CFrameWnd, и не позволяет для CChildView (производного от CWnd), хотя в
Q103786 сказано следующее (там явно указан класс CWnd):
SUMMARY
To change the background color for a CView, CFrameWnd, or CWnd object, process the WM_ERASEBKGND message. The sample code below demonstrates how to do this.
Указанный подход действительно "работает" — нужный цвет на доли секунды мелькает на экране. Собственно, проблема в том, чтобы проделать такую же фишку для класса CChildView, производного от CWnd, но для него сообщения WM_ERASEBKGND не мапятся — class wizard не позволяет установить обработчик для этого сообщения. Так что указанный подход, вероятно, не работает.
K>Всё работает.
K>Попробуй сделать новый проект так же как я, посмотри будет ли работать.
Попробовал, для приложения в архитектуре Doc/View все действительно работает.
Таким образом, вопрос почти снят. Почти — потому что осталось сделать то же самое для приложения не Doc/View, или для произвольного производного от CWnd класса.
Всего.