Поделиться через


Диспетчер визуализации

Визуальный диспетчер — это объект, который управляет внешним видом всего приложения. Он выступает в качестве одного класса, где можно поместить весь код рисования для приложения. Библиотека MFC включает несколько визуальных менеджеров. Вы также можете создать собственный визуальный менеджер, если вы хотите создать пользовательское представление для приложения. На следующих изображениях показано одно и то же приложение, если включены различные визуальные диспетчеры:

MyApp as rendered by CMFCVisualManagerWindows.
MyApp, использующий визуальный менеджер CMFCVisualManagerWindows

MyApp as rendered by CMFCVisualManagerVS2005.
MyApp, использующий визуальный диспетчер CMFCVisualManagerVS2005

MyApp as rendered by CMFCVisualManagerOfficeXP.
MyApp, использующий визуальный диспетчер CMFCVisualManagerOfficeXP

MyApp as rendered by CMFCVisualManagerOffice2003.
MyApp, использующий визуальный диспетчер CMFCVisualManagerOffice2003

MyApp as rendered by CMFCVisualManagerOffice2007.
MyApp, использующий визуальный диспетчер CMFCVisualManagerOffice2007

По умолчанию визуальный диспетчер поддерживает код рисования для нескольких элементов графического интерфейса. Чтобы предоставить пользовательские элементы пользовательского интерфейса, необходимо переопределить связанные методы рисования визуального диспетчера. Список этих методов см. в разделе "Класс CMFCVisualManager". Методы, которые можно переопределить для предоставления пользовательского внешнего вида, — это все методы, начинающиеся с OnDraw.

Приложение может иметь только один CMFCVisualManager объект. Чтобы получить указатель на визуальный диспетчер приложения, вызовите статическую функцию CMFCVisualManager::GetInstance. Так как все визуальные диспетчеры наследуют от CMFCVisualManager, CMFCVisualManager::GetInstance метод получит указатель на соответствующий визуальный диспетчер, даже если вы создаете пользовательский визуальный менеджер.

Если вы хотите создать пользовательский визуальный менеджер, необходимо наследовать его от визуального руководителя, который уже существует. Класс по умолчанию, производный от.CMFCVisualManager Однако вы можете использовать другой визуальный диспетчер, если он лучше похож на то, что вы хотите для вашего приложения. Например, если вы хотите использовать визуальный CMFCVisualManagerOffice2007 диспетчер, но хотел изменить способ внешнего вида разделителей, можно получить пользовательский класс из CMFCVisualManagerOffice2007. В этом сценарии следует перезаписать только методы для разделителей рисования.

Существует два возможных способа использования определенного визуального диспетчера для приложения. Одним из способов является вызов метода CMFCVisualManager::SetDefaultManager и передача соответствующего визуального диспетчера в качестве параметра. В следующем примере кода показано, как использовать визуальный диспетчер с этим методом CMFCVisualManagerVS2005 :

CMFCVisualManager::SetDefaultManager (RUNTIME_CLASS (CMFCVisualManagerVS2005));

Другой способ использовать визуальный диспетчер в приложении — создать его вручную. Затем приложение будет использовать этот новый визуальный диспетчер для всей отрисовки. Тем не менее, так как для каждого приложения может быть только один CMFCVisualManager объект, необходимо удалить текущий визуальный диспетчер перед созданием нового. В следующем примере CMyVisualManager — это пользовательский визуальный менеджер, производный от CMFCVisualManager. Следующий метод изменит, какой визуальный диспетчер используется для отображения приложения в зависимости от индекса:

void CMyApp::SetSkin (int index)
{
    if (CMFCVisualManager::GetInstance() != NULL)
    {
        delete CMFCVisualManager::GetInstance();
    }

    switch (index)
    {
    case DEFAULT_STYLE:
        // The following statement creates a new CMFCVisualManager
        CMFCVisualManager::GetInstance();
        break;

    case CUSTOM_STYLE:
        new CMyVisualManager;
        break;

    default:
        CMFCVisualManager::GetInstance();
        break;
    }

    CMFCVisualManager::GetInstance()->RedrawAll();
}

См. также

Элементы пользовательского интерфейса
Класс CMFCVisualManager