テクニカル ノート 31: コントロール バー
[!メモ]
次のテクニカル ノートは、最初にオンライン ドキュメントの一部とされてから更新されていません。結果として、一部のプロシージャおよびトピックが最新でないか、不正になります。最新の情報について、オンライン ドキュメントのキーワードで関係のあるトピックを検索することをお勧めします。
ここでは、 MFC のコントロール バー クラスを記述します: CControlBar、 CStatusBar、 CToolBar、 CDialogBarと CDockBar通常。
CControlBar
ControlBar は CWnd派生クラスと同じです:
フレーム ウィンドウの上または下に配置されます。
HWND ベースのコントロール (たとえば、 CDialogBar)またはHWND の非リスト項目 (たとえば、 CToolBar、 CStatusBar)である子項目を含む場合があります。
コントロール バーを追加形式をサポートします:
CBRS_TOP (既定)のピン設定上にコントロール バー。
CBRS_BOTTOM のピン設定下にコントロール バー。
CBRS_NOALIGN は、コントロール バーの親時のサイズ変更位置は変更されません。
CControlBar から派生したクラスは、より重要な実装を提供します:
CStatusBar A のステータス バー、項目は、テキストを含むステータス バーのペインです。
CToolBar A のツールバー、項目は行に配置されるビットマップ ボタンです。
標準のペインのコントロールをダイアログ テンプレート リソースから作成された)を含むCDialogBar A のツールバー形式のゾーン。
CDockBar は、汎化します。 CControlBar の他の派生オブジェクトの領域をドッキングします。このクラスで使用できる特定のメンバー関数や変数は、将来のリリースで変更されることがあります。
すべてのコントロール バー オブジェクトとペインが親フレーム ウィンドウの子ウィンドウです。これらは、通常、ゾーンのクライアント領域に兄弟として追加されます (たとえば、 MDI クライアントまたはビュー)。コントロール バーの子ウィンドウ ID が重要です。コントロール バーの既定のレイアウトは AFX_IDW_CONTROLBAR_LASTに AFX_IDW_CONTROLBAR_FIRST の範囲の ID のコントロール バーにのみ機能します。印刷プレビュー アーキテクチャでは直接サポートされているため、 256 のコントロール バー ID の範囲がある場合でも、これらのコントロール バーの ID の最初の 32 が特殊であることに注意してください。
CControlBar のクラスは、標準の実装を示します:
ゾーンの上端、下、またはいずれかの側にコントロール バーの配置。
コントロールの項目の配列を割り当てること。
派生クラスの実装のサポート。
C++ のコントロール バー オブジェクトは、通常 CFrameWnd の派生クラスのメンバーとして親 HWND とオブジェクトが破棄されるときに埋め込まれ、上、クリーンアップされます。ヒープのコントロール バー オブジェクトを割り当てる必要がある場合 HWND が破棄されるとき TRUE にコントロール バーdelete this「」を実行するに m_bAutoDestruct のメンバーを簡単に設定できます。
[!メモ]
作成した場合 CControlBarを作成する場合は、MFC の派生クラスの 1 つがを使用するよりも、派生クラス、 CStatusBarなど、 CToolBar、または CDialogBarの m_dwStyle のデータ メンバーを設定する必要があります。これは 生成(&&C),create,作成,生成のオーバーライドで実行できます:
// CMyControlBar is derived from CControlBar
BOOL CMyControlBar::Create( CWnd* pParentWnd, DWORD dwStyle, UINT nID )
{
m_dwStyle = dwStyle;
.
.
.
}
コントロール バーのレイアウトのアルゴリズム
コントロール バーのレイアウトのアルゴリズムは単純です。フレーム ウィンドウは、コントロール バーの範囲のすべての子 WM_SIZEPARENT にメッセージを送信します。このメッセージとともに、親のクライアントの四角形へのポインターが渡されます。このメッセージは、 z オーダーの子に送信されます。コントロールバーの子は、自身を置き、親のクライアント領域のサイズを小さくの情報を使用します。通常のクライアント領域 (少ないコントロール バー)のための最後の四角形は、主要なクライアント ウィンドウ (通常、 MDI クライアント、ビューまたは分割ペイン)を配置するために使用されます。
CWnd::RepositionBars と CFrameWnd::RecalcLayout を詳細については、 " " を参照してください。
MFC のプライベート ウィンドウ メッセージは、 WM_SIZEPARENTが テクニカル ノート 24で、説明しています。
CStatusBar
ステータス バーはテキスト出力ペインの行を持つコントロール バーです。テキスト出力ペインを使用する 2 とおりの一般的な方法があります:
メッセージ行として
(たとえば、標準メニューのヘルプ メッセージ行)。通常、これらはインデックスが 0 から始まるでアクセスします
状況インジケーターとして
(たとえば、キャップの、数値と SCRL のインジケーター)。通常、これらは文字列やコマンド ID でアクセスされます
ステータス バーのフォントが 10 ポイント MS Sans Serif (10 ポイントのスイス二つのプロポーショナル フォントの Windows インターフェイス アプリケーションのデザインのガイドやフォント マッパー最も一致して決定)。ウィンドウの特定のバージョンでは、 Japanese エディションのような、選択されたフォントは異なります。
ステータス バーで使用される色は、 Windows インターフェイス アプリケーションのデザインのガイドの推奨事項にも適合しています。これらの色はハードコードにし、コントロール パネルのユーザーのカスタマイズに応じて動的に変更されます。
項目 |
ウィンドウの色の値 |
既定の RGB |
---|---|---|
ステータス バーの背景 |
COLOR_BTNFACE |
RGB (192、 192、 192) |
ステータス バーのテキスト |
COLOR_BTNTEXT |
RGB (000、 000、 000) |
ステータス バーの上端または左端 |
COLOR_BTNHIGHLIGHT |
RGB (255、 255、 255) |
ステータス バーの bots と右端 |
COLOR_BTNSHADOW |
RGB (128、 128、 128) |
CStatusBar の CCmdUI サポート
インジケーターが通常、更新する方法は ON_UPDATE_COMMAND_UI の機能を通じてあります。アイドル時間、ステータス バーによってインジケーターのペインの文字列 ID の ON_UPDATE_COMMAND_UI ハンドラー。
ON_UPDATE_COMMAND_UI ハンドラーは、ダイヤルする場合:
有効にする: ペインを無効にするようにする場合、または。有効なペインはテキストとまったく同様の無効なペインの外観は非表示です (つまり、テキストのインジケーターを消去します)。
SetText: テキストを変更する。ペインが自動的にサイズ変更しないため、これを使用する場合は注意してください。
CStatusBar の作成とカスタマイズの API に関する詳細については、 クラス ライブラリ リファレンス のクラス CStatusBar を参照してください。ステータス バーのほとんどのカスタマイズは、ステータス バーが最初に表示されるようにする前にする必要があります。
ステータス バーは 1 個の伸縮性があるペインのみ、通常は最初のペイン サポートします。そのペインのサイズは実際に最小サイズです。ステータス バーですべてのペインの最小サイズよりも大きい場合、追加の幅が伸縮性があるペインに示します。最初のペインが伸縮性があるため、ステータス バーの既定のアプリケーションにキャップ、数値と SCRL の右揃えのインジケーターがあります。
CToolBar
ツールバーは区切り記号を含む可能性のあるビットマップ ボタンの行を持つコントロール バーです。ボタンの 2 とおりの形式はサポートされています: 押しボタンとチェック ボックス ボタン。オプション グループの機能はチェック ボックスのボタンと ON_UPDATE_COMMAND_UIでビルドできます。
ツールバーのすべてのビットマップ ボタンは 1 ピクセルのビットマップから取得されます。このビットマップは、各ボタンの 1 種類のイメージとグリフを含める必要があります。通常のビットマップ イメージとグリフの順序は、画面に描画される順序と同じです。(これは、カスタマイズの API を使用して変更できます)。
各ボタンは同じサイズである必要があります。既定では、標準 24x22 ピクセルです。各イメージとグリフのサイズが同じであり、ビットマップで side-by-side である必要があります。既定のイメージとグリフのサイズはピクセル × です。そのため、 10 のボタンを含むツールバーの場合 (標準サイズを使用)、 160 ピクセル幅と高さが 15 ピクセルであるビットマップが必要です。
各ボタンに一つのイメージング/1 グリフ二つあります。異なるボタンの状態およびフォームは、 1 種類のイメージとグリフ (たとえば、無効にする、中間無効に、押されて)アルゴリズムに生成されます。色のビットマップまたは DIB は理論的に使用できます。異なるボタンの状態を生成するアルゴリズムは、元のイメージをグレーの色合いの推奨を設定します。例では、 MFC の一般的なサンプル CLIPART で用意されている標準ツールバー ボタンとツールバー ボタンの clipart を参照してください。
ツールバーで使用される色は、 Windows インターフェイス アプリケーションのデザインのガイドの推奨事項にも適合しています。これらの色はハードコードにし、コントロール パネルのユーザーのカスタマイズに応じて動的に変更されます。
項目 |
ウィンドウの色の値 |
既定の RGB |
---|---|---|
ツールバーの背景 |
COLOR_BTNFACE |
RGB (192,192,192) |
ツールバー ボタンの上と左端 |
COLOR_BTNHIGHLIGHT |
RGB (255,255,255) |
ツールバー ボタンの右端または bots |
COLOR_BTNSHADOW |
RGB (128,128,128) |
また、ツールバー ビットマップのボタンは、標準のペインのボタン コントロールであるかのように recolored。色これは、ビットマップがユーザーのカスタマイズに応じてリソースとコントロール パネルのシステム カラーの変更に応じて読み込まれたときに発生します。ツールバー ビットマップの色は自動的に recolored ため、慎重に使用する必要があります。recolored ビットマップの部分がありたくなかったら密接にマップした RGB 値の 1 つはのよう色を使用します。マッピングはまったく RGB 値に基づいて行われます。
RGB 値 |
動的にマップされた色の値 |
---|---|
RGB (000、 000、 000) |
COLOR_BTNTEXT |
RGB (128、 128、 128) |
COLOR_BTNSHADOW |
RGB (192、 192、 192) |
COLOR_BTNFACE |
RGB (255、 255、 255) |
COLOR_BTNHIGHLIGHT |
クラス CToolBar を CToolBar の作成とカスタマイズの API に関する詳細については、 クラス ライブラリ リファレンス 参照してください。ツールバーのほとんどのカスタマイズはツールバーが最初に表示されるようにする前にする必要があります。
カスタマイズの API がボタンの ID、フォーム、スペーサーの幅を調整するために使用できる、ボタンまたはイメージとグリフを使用します。既定では、これらの API を使用する必要はありません。
CToolBar の CCmdUI サポート
ツールバー ボタンが更新された常にの方法は ON_UPDATE_COMMAND_UI の機能を通じてあります。アイドル時間、ツールバーによってそのボタンのコマンド ID の ON_UPDATE_COMMAND_UI ハンドラー。ON_UPDATE_COMMAND_UI は区切り記号を求められませんが、押しボタンとチェック ボックス ボタンに対して呼び出されます。
ON_UPDATE_COMMAND_UI ハンドラーは、ダイヤルする場合:
有効にする: ボタンを無効にするようにする場合、または。これは押しボタンとチェック ボックスのボタンに均等に動作します。
SetCheck: ボタンのチェック状態を設定します。ツールバー ボタンの呼び出すと、チェック ボックスのボタンに切り替えます。SetCheck は 0 (チェックされません)、 1 (チェックされる)または 2 つがでは、パラメーターを受け取ります (中間)
SetRadio: SetCheckの省略形。
チェック ボックス ボタンは 「自動」チェック ボックスのボタンで; つまり、ユーザーが押したとき、状態を変更します。checked ↓キーまたは弱められた状態です。「オフ」状態にボタンを変更する組み込みのユーザー インターフェイスの方法はありません; さらに、コードによってする必要があります。
カスタマイズの API は、特定の割り当てをツールバー ボタン、できればの状態を変更する必要があります。ツールバー ボタンが表すコマンドの ON_UPDATE_COMMAND_UI ハンドラーのこれらの状態を変更する決定します。、アイドル処理変更します ON_UPDATE_COMMAND_UI ハンドラーを持つツールバー ボタンの状態を通すため、 SetButtonStyle によるこれらの状態に対する変更は、次のアイドル状態の後に無くなる場合があります。
ツールバー ボタンは、ボタンまたはメニュー項目など WM_COMMAND のメッセージを送信し、 ON_UPDATE_COMMAND_UI ハンドラーを提供するのと同じクラスの ON_COMMAND ハンドラーで一般的に処理されます。
表示の状態に使用する 4 とおりのツールバー ボタンのフォーム (TBBS_ 値)があります:
TBBS_CHECKED: チェック ボックスが現在チェックされます ()。
TBBS_INDETERMINATE: チェック ボックスが現在不確定です。
TBBS_DISABLED: ボタンは、現在無効になります。
TBBS_PRESSED: ボタンは、現在押されています。
6 種類の正式な Windows インターフェイス アプリケーションのデザインのガイドのボタン スタイルは次の TBBS 値で表されます:
= 0 を超える
マウス = (TBBS_PRESSED| 他の形式)
無効 = TBBS_DISABLED
= TBBS_CHECKED
無効にされた = TBBS_CHECKED | TBBS_DISABLED
中間 = TBBS_INDETERMINATE
CDialogBar
ダイアログ バーは標準のウィンドウ コントロールを含むコントロール バーです。これはダイアログのようにコントロールが含まれていて、その中の記録をサポートする機能します。また、ダイアログのようにバーを表すためにダイアログ テンプレートを使用して機能します。
CDialogBar は、標準押しボタン コントロールを含む印刷プレビューをツールバーに使用されます。
CDialogBar を使用して CFormViewと同じように使用できます。ダイアログ バーのダイアログ テンプレートを定義し、 WS_CHILDを除くすべてのフォームを削除します。ダイアログが表示されない場合があることに注意してください。
CDialogBar のコントロール通知は、コントロール バーの親に送信されます (だけツールバー ボタンなど)。
CDialogBar の CCmdUI サポート
ダイアログ バーのボタンは ON_UPDATE_COMMAND_UI ハンドラー機能を通じて更新する必要があります。アイドル時間、ダイアログ バーの ID がの >= 0x8000 を持つすべてのボタンのコマンド ID の ON_UPDATE_COMMAND_UI ハンドラー (つまり、コマンド ID の範囲)。
ON_UPDATE_COMMAND_UI ハンドラーは、ダイヤルする場合:
有効: ボタンを無効にするようにする場合、または。
: SetText ボタンのテキストを変更する。
カスタマイズは標準のウィンドウ マネージャー API によって行うことができます。