MFC 拡張のカスタマイズのヒント
更新 : 2007 年 11 月
このトピックでは、Visual C++ 2008 Feature Pack を使用してアプリケーションをカスタマイズするためのヒントを示します。この一覧は、Visual C++ 2008 Feature Pack を使用して実行できるカスタマイズをすべて記載したものではありませんが、カスタマイズを始めるのに役立ちます。このトピックでは、いくつかの新機能を使用する場合に考慮が必要な点についても説明します。
全般的なカスタマイズ
アプリケーションの状態をレジストリに保存して読み込むことができます。このオプションを有効にすると、アプリケーションはレジストリから初期状態を読み込みます。アプリケーションの初期ドッキング レイアウトを変更した場合、アプリケーションのレジストリ データをクリアする必要があります。クリアしないと、初期レイアウトに加えた変更内容がレジストリ内のデータによってオーバーライドされます。
CBasePane のヒント
Visual C++ 2008 Feature Pack では、ペインと呼ばれるドッキング可能なコントロール バーが導入されました。次のカスタマイズのヒントでは、CBasePane クラスとそこから継承されるすべてのクラスについて説明します。
新しいペインを作成するときは、次のいくつかの新しいスタイルを適用できます。
AFX_CBRS_FLOAT - ペインをフローティング状態にします。
AFX_CBRS_AUTOHIDE - 自動非表示モードを有効にします。
AFX_CBRS_CLOSE - ペインを閉じる (非表示にする) ことができます。
これらのフラグは、ビットごとの OR 演算子と組み合わせることができます。
CBasePane は、仮想ブール値メソッド CBasePane::CanBeClosed、CBasePane::CanAutoHide、CBasePane::CanFloat を実装して、これらのフラグを反映します。派生クラスでこれらのフラグをオーバーライドして、動作をカスタマイズできます。
CBasePane::CanAcceptPane をオーバーライドすると、ドッキング動作をカスタマイズできます。別のペインをドッキングできないようにするには、ペインがこのメソッドから FALSE を返すようにします。
フローティング状態にできず、別のペインを前にドッキングできない (OutlookDemo サンプルの Outlook バーのような) 静的ペインを作成するには、ペインを非フローティングで作成し、CBasePane::DoesAllowDynInsertBefore をオーバーライドして FALSE を返します。AFX_CBRS_FLOAT スタイルを設定せずにペインが作成された場合、既定の実装は FALSE を返します。
すべてのペインは、-1 以外の ID で作成します。
ペインの表示/非表示を確認するには、CBasePane::IsVisible を使用します。タブ付きモードと自動非表示モードで表示状態が正常に処理されます。
非フローティングのサイズ変更可能なペインを作成するには、AFX_CBRS_FLOAT スタイルを設定せずにペインを作成し、CFrameWnd::DockControlBar を呼び出します。
ペインをドッキング レイアウトから除外したり、ドッキング バーからツール バーを削除するには、CBasePane::UndockPane を呼び出します。自動非表示モードのペインや、タブ付きウィンドウのタブに存在するペインについては、このメソッドを呼び出さないでください。
自動非表示モードのペインをフローティング状態にしたり、ドッキング解除するには、CBasePane::FloatPane または CBasePane::UndockPane を呼び出す前に、最初の引数に FALSE を指定して CDockablePane::SetAutoHideMode を呼び出す必要があります。
タブ コントロールのカスタマイズ
Visual C++ 2008 Feature Pack では、タブ コントロールの機能が拡張されています。次のヒントでは、CMFCBaseTabCtrl クラスとそこから継承されるすべてのクラスについて説明します。
切り離し可能なタブを有効にした場合、ポインタをタブ付きウィンドウに置いたままにしないでください。これらの切り離し可能なタブは、動的に作成したり破棄したりできます。したがって、ポインタが無効になる場合があります。
ユーザーがマウスを使用してタブ コントロール上のタブを動的に移動できるように、タブ コントロールを設定できます。この機能は、CMFCBaseTabCtrl クラスに組み込まれています。有効にするには、CMFCBaseTabCtrl::EnableTabSwap を呼び出します。
タブをタブ コントロールに追加すると、既定では切り離し可能なタブが追加されます。CMFCBaseTabCtrl::AddTab を使用して、切り離せないタブを追加することもできます。bDetachable パラメータを FALSE に設定すると、切り離しできないタブが追加されます。CMFCBaseTabCtrl::EnableTabDetach メソッドを呼び出して、タブの切り離しを可能にするかどうかを変更することもできます。
CWnd クラスから派生したオブジェクトは、ドッキング可能コントロール バーまたはドッキング可能タブに配置できます。ドッキングするコントロール全体に対して、CWnd オブジェクトをドッキング可能にする必要があります。これを実現するために、Visual C++ 2008 Feature Pack はラッパー クラスを使用します。このラッパー クラスは CDockablePaneAdapter クラスです。ドッキング可能コントロール バーまたはドッキング可能タブに追加された CWnd オブジェクトは、CDockablePaneAdapter オブジェクト内にラップされます。CMFCBaseTablCtrl オブジェクトの m_bEnableWrapping パラメータを FALSE に設定することにより、自動ラップを無効にできます。CMFCBaseTabCtrl::SetDockingBarWrapperRTC メソッドを使用することで、アプリケーションがラッパーとして使用するクラスを変更することもできます。
CDockingManager のヒント
次のヒントは CDockingManager オブジェクトに適用されます。
CDockingManager クラスは、次の 3 つのドッキング モードをサポートします。
AFX_DOCK_TYPE::DT_IMMEDIATE
AFX_DOCK_TYPE::DT_STANDARD
AFX_DOCK_TYPE::DT_SMART
これらのドッキング モードは CDockingManager::m_dockModeGlobal により定義され、CDockingManager::SetDockingMode を呼び出すことにより設定されます。
非フローティングのサイズ変更できないペインを作成するには、CDockingManager::AddPane メソッドを呼び出します。このメソッドは、ペインのレイアウトを制御するドッキング マネージャにペインを登録します。
CDockablePane のヒント
次のヒントは CDockablePane オブジェクトに適用されます。
タブ付きではない 2 つのドッキング可能ペインに CDockablePane::AttachToTabWnd を呼び出した場合、タブ付きウィンドウへのポインタが ppTabbedControlBar パラメータに返されます。このパラメータを使用することにより、続けてタブ付きウィンドウにタブを追加できます。
CDockablePane::AttachToTabWnd により作成されるタブ付きペインの型は、pTabControlBarAttachTo パラメータの CDockablePane オブジェクトにより決まります。CDockablePane::SetTabbedPaneRTC を呼び出して、CDockablePane が作成するタブ付きペインの型を設定できます。既定の型は、最初に CDockablePane を作成するときに CDockablePane::Create の dwTabbedStyle により決まります。dwTabbedStyle が AFX_CBRS_OUTLOOK_TABS の場合、既定の型は CMFCOutlookBar クラスです。dwTabbedStyle が AFX_CBRS_REGULAR_TABS の場合、既定の型は CTabbedPane クラスです。
ドッキング可能ペインを別のドッキング可能ペインにドッキングするには、CDockablePane::DockToWindow メソッドを呼び出します。このメソッドを呼び出す前に、元のペインをどこかにドッキングする必要があります。
メンバ変数 CDockablePane::m_bHideInAutoHideMode は、CDockablePane::ShowPane を呼び出したときにドッキング可能ペインが自動非表示モードでどのように動作するかを制御します。このメンバ変数が TRUE に設定されている場合、ドッキング可能ペインとその自動非表示ボタンは非表示になります。それ以外の場合は、スライド インおよびスライド アウトします。
CDockablePane::m_bDisableAnimation メンバ変数を TRUE に設定することで、自動非表示アニメーションを無効にできます。