視覺化管理員

視覺管理員是一個物件,可控制整個應用程式的外觀。 它可作為單一類別,您可以在其中放置應用程式的所有繪圖程式碼。 MFC 程式庫包含數個視覺管理員。 如果您想要為應用程式建立自訂檢視,您也可以建立自己的視覺管理員。 下列影像顯示啟用不同視覺管理員時的相同應用程式:

MyApp as rendered by CMFCVisualManagerWindows.
使用 CMFCVisualManagerWindows 視覺效果管理員的 MyApp

MyApp as rendered by CMFCVisualManagerVS2005.
使用 CMFCVisualManagerVS2005 視覺效果管理員的 MyApp

MyApp as rendered by CMFCVisualManagerOfficeXP.
使用 CMFCVisualManagerOfficeXP 視覺效果管理員的 MyApp

MyApp as rendered by CMFCVisualManagerOffice2003.
使用 CMFCVisualManagerOffice2003 視覺效果管理員的 MyApp

MyApp as rendered by CMFCVisualManagerOffice2007.
使用 CMFCVisualManagerOffice2007 視覺效果管理員的 MyApp

根據預設,視覺效果管理員會維護數個 GUI 元素的繪圖程式碼。 若要提供自訂 UI 元素,您必須覆寫視覺效果管理員的相關繪圖方法。 如需這些方法的清單,請參閱 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 類別