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