ビジュアル マネージャーは、アプリケーション全体の外観を制御するオブジェクトです。 これは、アプリケーションのすべての描画コードを配置できる 1 つのクラスとして機能します。 MFC ライブラリには、いくつかのビジュアル マネージャーが含まれています。 アプリケーションのカスタム ビューを作成する場合は、独自のビジュアル マネージャーを作成することもできます。 次の図は、異なるビジュアル マネージャーが有効になっている場合に同じアプリケーションを示しています。
CMFCVisualManagerWindows ビジュアル マネージャーを使用する MyApp
CMFCVisualManagerVS2005 ビジュアル マネージャーを使用する MyApp
CMFCVisualManagerOfficeXP ビジュアル マネージャーを使用する MyApp
CMFCVisualManagerOffice2003 ビジュアル マネージャーを使用する MyApp
CMFCVisualManagerOffice2007 ビジュアル マネージャーを使用する MyApp
既定では、ビジュアル マネージャーは複数の GUI 要素の描画コードを保持します。 カスタム UI 要素を提供するには、ビジュアル マネージャーの関連する描画メソッドをオーバーライドする必要があります。 これらのメソッドの一覧については、 CMFCVisualManager クラスを参照してください。 ユーザー設定の外観を提供するためにオーバーライドできるメソッドは、 OnDrawで始まるすべてのメソッドです。
アプリケーションで使用できる CMFCVisualManager オブジェクトは 1 つだけです。 アプリケーションのビジュアル マネージャーへのポインターを取得するには、静的関数 CMFCVisualManager::GetInstance を呼び出します。 すべてのビジュアル マネージャーは CMFCVisualManagerから継承するため、カスタム ビジュアル マネージャーを作成した場合でも、 CMFCVisualManager::GetInstance メソッドは適切なビジュアル マネージャーへのポインターを取得します。
カスタム ビジュアル マネージャーを作成する場合は、既に存在するビジュアル マネージャーから派生させる必要があります。 派生元の既定のクラスは CMFCVisualManager。 ただし、アプリケーションに適したビジュアル マネージャーが適している場合は、別のビジュアル マネージャーを使用できます。 たとえば、 CMFCVisualManagerOffice2007 ビジュアル マネージャーを使用するが、区切り記号の外観のみを変更する場合は、 CMFCVisualManagerOffice2007からカスタム クラスを派生できます。 このシナリオでは、描画の区切り記号のメソッドのみを上書きする必要があります。
アプリケーションに特定のビジュアル マネージャーを使用するには、2 つの方法があります。 1 つの方法は、 CMFCVisualManager::SetDefaultManager メソッドを呼び出し、適切なビジュアル マネージャーをパラメーターとして渡すことです。 次のコード例は、このメソッドで CMFCVisualManagerVS2005 ビジュアル マネージャーを使用する方法を示しています。
CMFCVisualManager::SetDefaultManager (RUNTIME_CLASS (CMFCVisualManagerVS2005));
アプリケーションでビジュアル マネージャーを使用するもう 1 つの方法は、手動で作成することです。 その後、アプリケーションはすべてのレンダリングにこの新しいビジュアル マネージャーを使用します。 ただし、アプリケーションごとに 1 つの 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();
}