可视化效果管理器

视觉对象管理器是控制整个应用程序外观的对象。 它充当单个类,可在其中放置应用程序的所有绘图代码。 MFC 库包括多个视觉对象管理器。 如果想要为应用程序创建自定义视图,还可以创建自己的视觉对象管理器。 启用不同的视觉管理器时,下图显示了相同的应用程序:

CMFCVisualManagerWindows 呈现的 MyApp。
使用 CMFCVisualManagerWindows 视觉管理器的 MyApp

CMFCVisualManagerVS2005 呈现的 MyApp。
使用 CMFCVisualManagerVS2005 视觉管理器的 MyApp

由 CMFCVisualManagerOfficeXP 呈现的 MyApp。
使用 CMFCVisualManagerOfficeXP 视觉管理器的 MyApp

由 CMFCVisualManagerOffice2003 呈现的 MyApp。
使用 CMFCVisualManagerOffice2003 视觉对象管理器的 MyApp

由 CMFCVisualManagerOffice2007 呈现的 MyApp。
使用 CMFCVisualManagerOffice2007 视觉对象管理器的 MyApp

默认情况下,视觉对象管理器维护多个 GUI 元素的绘图代码。 若要提供自定义 UI 元素,需要重写视觉对象管理器的相关绘图方法。 有关这些方法的列表,请参阅 CMFCVisualManager 类。 可以重写以提供自定义外观的方法都是以 OnDraw..

应用程序只能有一个 CMFCVisualManager 对象。 若要获取指向应用程序的视觉管理器的指针,请调用静态函数 CMFCVisualManager::GetInstance。 由于所有视觉对象管理器都继承自 CMFCVisualManagerCMFCVisualManager::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 类