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


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

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

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

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

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

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

MyApp, отрисованный 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