この記事では、Windows コントロールを含むツール バー ボタンをツール バーに追加する方法について説明します。 MFC では、ツール バー ボタンは、CMFCToolBarComboBoxButton
クラス、CMFCToolBarEditBoxButton
クラス、CMFCDropDownToolbarButton
クラス、CMFCToolBarMenuButton
クラスなど、CMFCToolBarButton
クラス派生クラスである必要があります。
ツール バーへのコントロールの追加
ツール バーにコントロールを追加するには、次の手順に従います。
親ツール バー リソースのボタンのダミー リソース ID を予約します。 Visual Studio で ツール バー エディター を使用してボタンを作成する方法の詳細については、 ツール バー エディター の記事を参照してください。
親ツールバーのすべてのビットマップ内のボタンのツールバー イメージ (ボタン アイコン) を予約します。
AFX_WM_RESETTOOLBAR
メッセージを処理するメッセージ ハンドラーで、次の手順を実行します。CMFCToolbarButton
派生クラスを使用してボタン コントロールを構築します。CMFCToolBar::ReplaceButton
を使用して、ダミー ボタンを新しいコントロールに置き換えます。ReplaceButton
はボタン オブジェクトをコピーし、コピーを保持するため、スタック上にボタン オブジェクトを作成できます。
注
アプリケーションでカスタマイズを有効にした場合は、[カスタマイズ] ダイアログ ボックスの [ツール バー] タブの [リセット] ボタンを使用してツール バーをリセットし、再コンパイル後にアプリケーションで更新されたコントロールを表示する必要がある場合があります。 ツール バーの状態は Windows レジストリに保存され、アプリケーションの起動時に ReplaceButton
メソッドが実行された後にレジストリ情報が読み込まれ、適用されます。
ツール バー コントロールとカスタマイズ
[カスタマイズ] ダイアログ ボックスの [コマンド] タブには、アプリケーションで使用できるコマンドの一覧が表示されます。 既定では、[ カスタマイズ ] ダイアログ ボックスはアプリケーション メニューを処理し、各メニュー カテゴリの標準ツール バー ボタンの一覧を作成します。 ツール バー コントロールが提供する拡張機能を維持するには、[ カスタマイズ ] ダイアログ ボックスの標準ツール バー ボタンをカスタム コントロールに置き換える必要があります。
カスタマイズを有効にする場合は、CMFCToolBarsCustomizeDialog
クラス クラスを使用して、カスタマイズ ハンドラー OnViewCustomize
で [カスタマイズ] ダイアログ ボックスを作成します。
CMFCToolBarsCustomizeDialog::Create
を呼び出して [カスタマイズ] ダイアログ ボックスを表示する前に、CMFCToolBarsCustomizeDialog::ReplaceButton
を呼び出して、標準ボタンを新しいコントロールに置き換えます。
例: 検索コンボ ボックスを作成する
このセクションでは、ツール バーに表示され、最近使用した検索文字列を含む 検索 コンボ ボックス コントロールを作成する方法について説明します。 ユーザーは、コントロールに文字列を入力し、Enter キーを押してドキュメントを検索するか、エスケープ キーを押してフォーカスをメイン フレームに戻すことができます。 次の使用例は、ドキュメントが CEditView
クラス派生ビューに表示されることを前提としています。
検索コントロールの作成
まず、[ 検索 ] コンボ ボックス コントロールを作成します。
ボタンとそのコマンドをアプリケーション リソースに追加します。
アプリケーション リソースで、
ID_EDIT_FIND
コマンド ID を持つ新しいボタンを、アプリケーションのツール バーおよびツール バーに関連付けられているビットマップに追加します。ID_EDIT_FIND
コマンド ID を使用して新しいメニュー項目を作成します。文字列テーブルに新しい文字列
"Find the text\nFind"
を追加し、ID_EDIT_FIND_COMBO
コマンド ID を割り当てます。 この ID は、[ 検索 ] コンボ ボックス ボタンのコマンド ID として使用されます。注
ID_EDIT_FIND
はCEditView
によって処理される標準コマンドであるため、このコマンドの特別なハンドラーを実装する必要はありません。 ただし、新しいコマンドID_EDIT_FIND_COMBO
のハンドラーを実装する必要があります。
CComboBox
クラスから派生した新しいクラスCFindComboBox
を作成します。CFindComboBox
クラスで、PreTranslateMessage
仮想メソッドをオーバーライドします。 このメソッドは、コンボ ボックスでWM_KEYDOWN
メッセージを処理できるようにします。 ユーザーがエスケープ キー (VK_ESCAPE
) にヒットした場合は、フォーカスをメイン フレーム ウィンドウに戻します。 ユーザーが Enter キー (VK_ENTER
) にヒットした場合は、メイン フレーム ウィンドウに、ID_EDIT_FIND_COMBO
コマンド ID を含むWM_COMMAND
メッセージを投稿します。CMFCToolBarComboBoxButton
クラスから派生した [検索] コンボ ボックス ボタンのクラスを作成します。 この例では、CFindComboButton
という名前です。CMFCToolbarComboBoxButton
のコンストラクターは、ボタンのコマンド ID、ボタンイメージのインデックス、コンボ ボックスのスタイルの 3 つのパラメーターを受け取ります。 これらのパラメーターを次のように設定します。コマンド ID として
ID_EDIT_FIND_COMBO
を渡します。CCommandManager::GetCmdImage
とID_EDIT_FIND
を使用して、イメージ インデックスを取得します。使用可能なコンボ ボックス スタイルの一覧については、「 Combo-Box スタイル」を参照してください。
CFindComboButton
クラスで、CMFCToolbarComboBoxButton::CreateCombo
メソッドをオーバーライドします。 ここでは、CFindComboButton
オブジェクトを作成し、そのオブジェクトへのポインターを返す必要があります。IMPLEMENT_SERIAL
マクロを使用して、コンボ ボタンを永続的にします。 ワークスペース マネージャーは、ボタンの状態を Windows レジストリに自動的に読み込んで保存します。ドキュメント ビューに
ID_EDIT_FIND_COMBO
ハンドラーを実装します。ID_EDIT_FIND_COMBO
でCMFCToolBar::GetCommandButtons
を使用して、すべての [検索] コンボ ボックス ボタンを取得します。 カスタマイズにより、同じコマンド ID を持つボタンのコピーが複数存在する場合があります。ID_EDIT_FIND
メッセージ ハンドラーOnFind
で、CMFCToolBar::IsLastCommandFromButton
を使用して、[検索] コンボ ボックス ボタンから検索コマンドが送信されたかどうかを確認します。 その場合は、テキストを検索し、検索文字列をコンボ ボックスに追加します。
メイン ツールバーへの検索コントロールの追加
コンボ ボックス ボタンをツール バーに追加するには、次の手順に従います。
メイン フレーム ウィンドウに
AFX_WM_RESETTOOLBAR
メッセージ ハンドラーOnToolbarReset
を実装します。注
フレームワークは、アプリケーションの起動時にツール バーが初期化されたとき、またはカスタマイズ中にツール バーがリセットされたときに、このメッセージをメイン フレーム ウィンドウに送信します。 どちらの場合も、標準のツール バー ボタンをカスタムの [検索 ] コンボ ボックス ボタンに置き換える必要があります。
AFX_WM_RESETTOOLBAR
ハンドラーで、ツール バー ID、つまり、AFX_WM_RESETTOOLBAR
メッセージのWPARAM
を調べます。 ツール バー ID が [ 検索 ] コンボ ボックス ボタンを含むツール バーの ID と等しい場合は、CMFCToolBar::ReplaceButton
を呼び出して、[ 検索 ] ボタン (つまり、コマンド IDID_EDIT_FIND
のボタン) をCFindComboButton
オブジェクトに置き換えます。注
ReplaceButton
はボタン オブジェクトをコピーし、コピーを保持するため、スタック上にCFindComboBox
オブジェクトを作成できます。
[カスタマイズ] ダイアログ ボックスへの検索コントロールの追加
カスタマイズ ハンドラー OnViewCustomize
で、 CMFCToolBarsCustomizeDialog::ReplaceButton
を呼び出して 、[検索 ] ボタン (つまり、コマンド ID ID_EDIT_FIND
のボタン) を CFindComboButton
オブジェクトに置き換えます。
こちらも参照ください
階層グラフの
クラス
CMFCToolBar
クラスの
CMFCToolBarButton
クラスの
CMFCToolBarComboBoxButton
クラスの
CMFCToolBarsCustomizeDialog
クラスの