ビジュアル マネージャ
更新 : 2007 年 11 月
ビジュアル マネージャは、Visual C++ 2008 Feature Pack により MFC ライブラリに組み込まれます。ビジュアル マネージャは、アプリケーション全体の外観を制御するオブジェクトです。単一のクラスとして動作し、アプリケーションのすべての描画コードを配置できます。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();
}
参照
概念
Visual C++ 2008 用の MFC Feature Pack