次の方法で共有


方法: Windows フォーム コントロールにコマンド ルーティングを追加する

CWinFormsView は、ユーザー コントロールが MFC のコマンド (フレームのメニュー項目やツール バー ボタンなど) を処理できるように、コマンドおよび更新コマンド UI メッセージをそのユーザー コントロールにルーティングします。

ユーザー コントロールでは、次の例に示すように、ICommandTarget::Initialize を使用して、コマンド ソース オブジェクトへの参照を m_CmdSrc に格納します。 ICommandTarget を使用するには、mfcmifc80.dll への参照を追加する必要があります。

CWinFormsView は、共通の MFC ビューの通知をマネージ ユーザー コントロールに転送することによって処理します。 これらの通知には、IView インターフェイスOnInitialUpdateOnUpdate、および OnActivateView の各メソッドが含まれます。

このトピックは、前の手順の「方法: ダイアログ ボックスにユーザー コントロールおよびホストを作成する」および「方法: ユーザー コントロールを作成し、MDI ビューをホストする」を完了していることを前提としています。

MFC ホスト アプリケーションを作成するには

  1. 方法: ダイアログ ボックスにユーザー コントロールおよびホストを作成する」で作成した Windows フォーム コントロール ライブラリを開きます。

  2. mfcmifc80.dll への参照を追加します。それには、ソリューション エクスプローラーで、プロジェクト ノードを右クリックし、[参照の追加] をクリックして、Microsoft Visual Studio 10.0\VC\atlmfc\lib を参照します。

  3. UserControl1.Designer.cs を開いて、次の using ステートメントを追加します。

    using Microsoft.VisualC.MFC;
    
  4. また、UserControl1.Designer.cs の次の行を変更します。

    partial class UserControl1
    

    変更後は次のようになります。

    partial class UserControl1 : System.Windows.Forms.UserControl, ICommandTarget
    
  5. UserControl1 のクラス定義の最初の行として次の行を追加します。

    private ICommandSource m_CmdSrc;
    
  6. 次のメソッドの定義を 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.");
    }
    
  7. 方法: ユーザー コントロールを作成し、MDI ビューをホストする」で作成した MFC アプリケーションを開きます。

  8. singleMenuHandler を呼び出すメニュー オプションを追加します。

    リソース ビューに移動し (Ctrl キーを押しながら W キーを押し、次に R キーを押し)、[メニュー] フォルダーを展開して、[IDR_MFC02TYPE] をダブルクリックします。 これにより、メニュー エディターが表示されます。

    [表示] メニューの一番下にメニュー オプションを追加します。 プロパティ ウィンドウのメニュー オプションの ID を書き留めておきます。 ファイルを保存します。

    ソリューション エクスプローラーで、Resource.h ファイルを開きます。先ほど追加したメニュー オプションの ID の値をコピーし、C# プロジェクトの Initialize メソッド内の m_CmdSrc.AddCommandHandler 呼び出しに 1 つ目のパラメーターとしてその値を貼り付けます (必要な場合は 32771 を置き換えます)。

  9. プロジェクトをビルドして実行します。

    [ビルド] メニューの [ソリューションのビルド] をクリックします。

    [デバッグ] メニューの [デバッグなしで開始] をクリックします。

    追加したメニュー オプションを選択します。 .dll 内のメソッドが呼び出されます。

参照

参照

ICommandSource インターフェイス

ICommandTarget インターフェイス

CommandHandler デリゲート

その他の技術情報

MFC ビューとしての Windows フォーム ユーザー コントロールのホスト