ドッキング ツール バーとフローティング ツール バー
更新 : 2007 年 11 月
MFC ライブラリでは、ドッキング可能なツール バーがサポートされています。ドッキング可能なツール バーは、親ウィンドウの任意の辺に取り付ける (ドッキングする) ことや、ミニフレーム ウィンドウの形でウィンドウの辺から取り外す (フローティング状態にする) ことができます。ここでは、アプリケーションでのドッキング可能ツール バーの使用方法について説明します。
アプリケーション ウィザードを使用して、アプリケーションのスケルトンを生成する場合は、ドッキング可能ツール バーを生成するかどうかを選択するよう求められます。既定では、アプリケーションにドッキング可能ツール バーを配置する場合に必要な、以下の 3 種類の動作を実行するコードがアプリケーション ウィザードによって生成されます。
フレーム ウィンドウをドッキング可能にする
ツール バーをドッキング可能にする
ツール バーを (フレーム ウィンドウに) ドッキングする
これらの手順のどれかが省略されても、アプリケーションには標準のツール バーが表示されます。最後の 2 つの手順は、アプリケーションの各ドッキング可能ツール バーごとに必要です。
以下の内容についても説明します。
ツール バーのフローティング
ツール バーのサイズを動的に変更する
固定したスタイルのツール バーに折り返し場所を設定する
MFC の「標準のサンプル」の「DOCKTOOL サンプル : ドッキング可能ツール バー」を参照してください。
フレーム ウィンドウをドッキング可能にする
ツール バーをフレーム ウィンドウにドッキングするには、フレーム ウィンドウ (ドッキング先) をドッキング可能にする必要があります。ドッキング可能にするには、CFrameWnd::EnableDocking 関数を使用します。この関数は、ドッキングを受け入れるフレーム ウィンドウの辺を示す、一連のスタイル ビットである DWORD パラメータを 1 つとります。ツール バーをドッキングするときに、ドッキング可能な辺が複数ある場合は、EnableDocking に渡されたパラメータで示される辺が、上、下、左、右の順で使用されます。コントロール バーを任意の場所にドッキングする場合は、EnableDocking に CBRS_ALIGN_ANY を渡します。
ツール バーをドッキング可能にする
ドッキング先の準備ができたら、同様にツール バー (ドッキング元) の準備をする必要があります。ドッキングするツール バーごとに CControlBar::EnableDocking を呼び出し、そのツール バーのドッキング先になる辺を指定します。CControlBar::EnableDocking を呼び出して指定した辺が、フレーム ウィンドウのドッキング可能な辺と一致しない場合は、ツール バーはドッキングできず、フローティング状態になります。いったんフローティング状態になると、そのツール バーはフローティング ツール バーのままとなり、フレーム ウィンドウにはドッキングできません。
常にフローティング ツール バーにする場合は、パラメータに 0 を指定して EnableDocking を呼び出してから、CFrameWnd::FloatControlBar を呼び出します。ツール バーはフローティング状態のままとなり、どこにもドッキングできなくなります。
ツール バーをドッキングする
フレーム ウィンドウのドッキング可能な辺にユーザーがツール バーをドロップすると、フレームワークは、CFrameWnd::DockControlBar を呼び出します。
また、いつでもこの関数を呼び出して、コントロール バーをフレーム ウィンドウにドッキングできます。この処理は通常、初期化中に行われます。フレーム ウィンドウの特定の辺に、複数のツール バーをドッキングできます。
ツール バーのフローティング
ドッキング可能ツール バーをフレーム ウィンドウから取り外すことを "ツール バーをフローティング状態にする" と言います。ツール バーをフローティング状態にするには、CFrameWnd::FloatControlBar を呼び出します。フローティングするツール バーとその配置場所、およびツール バーを水平に配置するか垂直に配置するかを指定します。
ツール バーが、ドッキングされている場所からドッキング不可能な場所にドラッグ アンド ドロップされると、フレームワークはこの関数を呼び出します。ドッキング不可能な場所は、フレーム ウィンドウの内側または外側に存在する可能性があります。DockControlBar と同じように、初期化中にこの関数を呼び出すこともできます。
MFC のドッキング可能ツール バーでは、一部のアプリケーションでサポートされている拡張機能が実装されていない場合があります。カスタマイズできるツール バーなどの機能はサポートされていません。
ツール バーのサイズを動的に変更する
Visual C++ Version 4.0 では、アプリケーションのユーザーがフローティング ツール バーのサイズを動的に変更できます。通常、ツール バーは横長に表示されます。その向きと形は変更できます。たとえば、ユーザーがフレーム ウィンドウの任意の垂直な辺にツール バーをドッキングすると、形が縦のレイアウトに変わります。また、ツール バーの形をボタンが複数行に配列された四角形に変えることもできます。
次の操作を行うことができます。
動的なサイズ変更をツール バー特性として指定する。
固定したサイズ変更をツール バー特性として指定する。
この機能をサポートするために 2 つの新しいツール バー スタイルが用意されています。この 2 つのスタイルは、CToolBar::Create メンバ関数の呼び出しで使用します。ツール バー スタイルは、次のとおりです。
CBRS_SIZE_DYNAMIC コントロール バーのサイズ変更スタイルは動的です。
CBRS_SIZE_FIXED コントロール バーのサイズ変更スタイルは固定されています。
動的なサイズ変更スタイルを使用した場合、ユーザーはフローティング状態のツール バーのサイズ変更はできますが、ドッキングされているツール バーのサイズ変更はできません。ユーザーがツール バーの辺をドラッグするのに合わせて、ツール バーは必要な場所で "折り返され"、形が変わります。
固定したサイズ変更スタイルを使用した場合は、ツール バーの折り返し状態が保持され、各列のボタンの位置が固定されます。アプリケーションのユーザーはツール バーの形状を変更できません。ツール バーは、ボタンの間の区切り記号の場所など、指定した場所で折り返されます。この形は、ツール バーがドッキングされていてもフローティング状態でも保持されます。ボタンが複数列に配列されている、固定したパレットになります。
また、CToolBar::GetButtonStyle を使用して、ツール バーのボタンの状態とスタイルを返すこともできます。ボタンのスタイルは、ボタンの表示方法、およびユーザー入力に対する応答方法を示します。ボタンの状態は、ボタンが折り返されているかどうかを示します。
固定したスタイルのツール バーに折り返し場所を設定する
固定したサイズ変更スタイルのツール バーに対しては、ツール バーの折り返し場所となるツール バー ボタンのインデックスを指定します。メイン フレーム ウィンドウの OnCreate オーバーライドで、折り返すインデックスを指定する方法を示すコードは、次のとおりです。
// Get the style of the first button separator
UINT nStyle = m_wndToolBar.GetButtonStyle(3);
// Augment the state for wrapping
nStyle |= TBBS_WRAPPED;
m_wndToolBar.SetButtonStyle(3, nStyle);
// Do the same for other wrap locations ...
// Set the bar style to size fixed
m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle() |
CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_FIXED);
// Call docking/floating functions as needed ...
MFC の「標準のサンプル」の「DOCKTOOL サンプル : ドッキング可能ツール バー」には、CControlBar クラスと CToolBar クラスのメンバ関数を使用して、ツール バーの動的なレイアウトを管理する方法が示されています。DOCKTOOL のファイル EDITBAR.CPP を参照してください。