Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 2 августа!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

ПРОГРАММИРОВАНИЕ НА C и С++



Давно заметил, что всё-таки языки С/C++ это не самый лучший вариант программирования под Windows. Сейчас появилась масса более современных и удобных языков, например тот же Python - кроссплатформенный язык, очень легок в изучение. Я его изучил буквально за несколько дней по этому курсу - ссылка. Автор постарался, там видеоуроки на удивление легкие и понятные.

Как изменить цвет фона окна в MFC

Чтобы изменить цвет фона для объектов 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), проделайте следующие шаги, используя визард:

  1. При помощи ClassWizard создайте универсальный класс CWnd.
  2. В классе CMainFrame создайте переменную-челен типа CWnd из пункта 1.
  3. В функции 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.

  4. Всякий раз, когда делается сабклассинг окна, то должна быть переопределена функция 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).

  5. Переопределите сообщение WM_ERASEBKGND для универсального класса CWnd, используя код, приведённый выше.

Чтобы изменить фоновый цвет объекта CFormView, можно обработать сообщение WM_ERASEBKGND и использовать код, приведённый выше, либо обработать сообщение WM_CTLCOLOR.

 

 





<< ВЕРНУТЬСЯ В ПОДРАЗДЕЛ

<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ




Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU Проект ReactOS