如何:向 Windows 窗体控件添加命令传送

CWinFormsView 将命令和更新命令 UI 消息路由到用户控件,以允许它处理 MFC 命令(例如帧菜单项和工具栏按钮)。

用户控件使用 ICommandTarget::Initializem_CmdSrc 中存储对命令源对象的引用,如下例所示。 若要使用 ICommandTarget,你必须添加一个对 mfcmifc80.dll 的引用。

CWinFormsView 通过将多个常用的 MFC 视图通知转发到托管的用户控件来对其进行处理。 这些通知包括 OnInitialUpdateOnUpdateOnActivateView 方法。

本主题假设你之前已完成了如何:创建用户控件并将它承载在对话框中以及如何:创建用户控件并承载 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+Shift+E),展开“菜单”文件夹,然后双击 IDR_MFC02TYPE。 此时将显示菜单编辑器。

    在“查看”菜单底部添加菜单选项。 注意“属性”窗口中菜单选项的 ID。 保存文件。

    在解决方案资源管理器中,打开 Resource.h 文件,复制刚添加的菜单选项的 ID 值,然后将该值作为第一个参数粘贴到 C# 项目的 Initialize 方法中的 m_CmdSrc.AddCommandHandler 调用(如有必要,替换 32771

  9. 生成并运行该项目。

    “生成” 菜单上,单击 “生成解决方案”

    在“调试”菜单上,单击“开始执行(不调试)”

    选择添加的菜单选项。 请注意,调用了 .dll 中的方法。

另请参阅

以 MFC 视图的形式承载 Windows 窗体用户控件
ICommandSource 接口
ICommandTarget 接口