Чтобы изменить цвет фона для объектов CView, CFrameWnd, или CWnd, необходимо обработать сообщение WM_ERASEBKGND. Пример, приведённый ниже, демонстрирует, как это сделать. Пример кода BOOL CSampleView::OnEraseBkgnd(CDC* pDC) { // Устанавливаем цвет кисти, соответствующий цвету фона CBrush backBrush(RGB(255, 128, 128));
// Записываем старую кисть CBrush* pOldBrush = pDC->SelectObject(&backBrush);
CRect rect; pDC->GetClipBox(&rect); // Стираем нужную область
pDC->PatBlt(rect.left, rect.top, rect.Width(), rect.Height(), PATCOPY); pDC->SelectObject(pOldBrush); return TRUE; } Для изменения фонового цвета окна для CMDIFrameWnd, необходимо создать подкласс (subclass) клиентского окна в многодокументном интерфейсе (MDI) (окно в клиентской области CMDIFrameWnd) и обработать сообщение WM_ERASEBKGND. Более подробно о сабклассинге окна MDICLIENT смотрите статью из Microsoft Knowledge Base: Q129471 Сабклассинг (SubClass) MDIClient в MFC Для изменения фонового цвета слиентского окна MDI ( клиентская область CMDIFrameWnd), проделайте следующие шаги, используя визард: - При помощи ClassWizard создайте универсальный класс CWnd.
- В классе CMainFrame создайте переменную-челен типа CWnd из пункта 1.
- В функции OnCreate класса CMainFrame после вызова базового класса CMDIFrameWnd::OnCreate(), добавьте вызов SubclassWindow(). Например:
if (!m_wndNewClient.SubclassWindow(m_hWndMDIClient)) { TRACE("Failed to subclass MDI client window\n"); return -1; // fail to create } m_hWndMDIClient это переменная-член CMDIFrameWnd которая содержит дескриптор клиентского окна MDI. Так же, замените "m_wndNewClient" той переменной, которую Вы создали в пункте 2. - Всякий раз, когда делается сабклассинг окна, то должна быть переопределена функция GetSuperWndProcAddr() член CWnd, чтобы обеспечить хранение адреса процедуры старого окна. Для этого добавьте следующую функцию в класс CWnd, созданный в пункте 1:
WNDPROC* CNewClientWnd::GetSuperWndProcAddr() { static WNDPROC NEAR pfnSuper = NULL; return &pfnSuper; } ЗАМЕЧАНИЕ: Замените "CNewClientWnd" на имя Вашего класса.
Информацию о сабклассинге окон при помощи MFC можно посмотреть в следующих материалах: - "Class Library Reference" для функций CWnd::SubclassWindow(), CWnd::GetSuperWndProcAddr(), и CWnd::SubclassDlgItem()
- Поискать в Microsoft Knowledge Base по следующим ключевым словам:
subclass and sample and mfc - Посмотреть MFC пример CTRLTEST, который поставляется с Visual C++ for Windows и Visual C++ 32-bit Edition.
- См. статью под названием "Subclassing Windows with the Microsoft Foundation Class Library" на компакт диске Microsoft Developer Network (MSDN).
- Переопределите сообщение WM_ERASEBKGND для универсального класса CWnd, используя код, приведённый выше.
Чтобы изменить фоновый цвет объекта CFormView, можно обработать сообщение WM_ERASEBKGND и использовать код, приведённый выше, либо обработать сообщение WM_CTLCOLOR. |