方法: Windows フォーム コントロールにコマンド ルーティングを追加する
CWinFormsView は、ユーザー コントロールが MFC のコマンド (フレームのメニュー項目やツール バー ボタンなど) を処理できるように、コマンドおよび更新コマンド UI メッセージをそのユーザー コントロールにルーティングします。
ユーザー コントロールでは、次の例に示すように、ICommandTarget::Initialize を使用して、コマンド ソース オブジェクトへの参照を m_CmdSrc
に格納します。 ICommandTarget
を使用するには、mfcmifc80.dll への参照を追加する必要があります。
CWinFormsView
は、共通の MFC ビューの通知をマネージド ユーザー コントロールに転送することによって処理します。 これらの通知には、OnInitialUpdate、OnUpdate、OnActivateView の各メソッドが含まれます。
このトピックでは、「方法: ダイアログ ボックスにユーザー コントロールおよびホストを作成する」と「方法: ユーザー コントロールを作成し、MDI ビューをホストする」が既に済んでいるものとします。
MFC ホスト アプリケーションを作成するには
「方法: ダイアログ ボックスにユーザー コントロールおよびホストを作成する」で作成した Windows フォーム コントロール ライブラリを開きます。
mfcmifc80.dll への参照を追加します。それには、ソリューション エクスプローラーで、プロジェクト ノードを右クリックし、[追加]、[参照] の順に選んで、Microsoft Visual Studio 10.0\VC\atlmfc\lib を参照します。
UserControl1.Designer.cs を開いて、次の using ステートメントを追加します。
using Microsoft.VisualC.MFC;
また、UserControl1.Designer.cs の次の行を変更します。
partial class UserControl1
変更後は次のようになります。
partial class UserControl1 : System.Windows.Forms.UserControl, ICommandTarget
UserControl1
のクラス定義の最初の行として次の行を追加します。private ICommandSource m_CmdSrc;
次のメソッドの定義を
UserControl1
に追加します (次の手順で、MFC コントロールの ID を作成します)。public void Initialize (ICommandSource cmdSrc) { m_CmdSrc = cmdSrc; // need ID of control in MFC dialog and callback function m_CmdSrc.AddCommandHandler(32771, new CommandHandler (singleMenuHandler)); } private void singleMenuHandler (uint cmdUI) { // User command handler code System.Windows.Forms.MessageBox.Show("Custom menu option was clicked."); }
「方法: ユーザー コントロールを作成し、MDI ビューをホストする」で作成した MFC アプリケーションを開きます。
singleMenuHandler
を呼び出すメニュー オプションを追加します。リソース ビューに移動し (Ctrl + Shift + E キー)、[メニュー] フォルダーを展開して、IDR_MFC02TYPE をダブルクリックします。 これにより、メニュー エディターが表示されます。
[表示] メニューの一番下にメニュー オプションを追加します。 [プロパティ] ウィンドウのメニュー オプションの ID を確認します。 ファイルを保存します。
ソリューション エクスプローラーで、Resource.h ファイルを開き、先ほど追加したメニュー オプションの ID の値をコピーして、C# プロジェクトの
Initialize
メソッド内のm_CmdSrc.AddCommandHandler
の呼び出しの 1 つ目のパラメーターとしてその値を貼り付けます (必要な場合は32771
を置き換えます)。プロジェクトをビルドして実行します。
[ビルド] メニューの [ソリューションのビルド] をクリックします。
[デバッグ] メニューの [デバッグなしで開始] をクリックします。
追加したメニュー オプションを選択します。 .dll 内のメソッドが呼び出されます。
関連項目
MFC ビューとしての Windows フォーム ユーザー コントロールのホスト
ICommandSource インターフェイス
ICommandTarget インターフェイス