ビジュアル マネージャー
ビジュアル マネージャーは、アプリケーション全体の外観を制御するオブジェクトです。 アプリケーションのすべての描画コードを配置可能な単一のクラスとして機能します。 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 つの方法は、手動で作成することです。 アプリケーションでは、すべてのレンダリングにこの新しいビジュアル マネージャーを使用します。 ただし、アプリケーションごとに CMFCVisualManager
オブジェクトは 1 つしか存在できないため、新しいビジュアル マネージャーを作成する前に、現在のビジュアル マネージャーを削除する必要があります。 次の例では、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();
}