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

CWinFormsView 将命令和更新命令 UI 消息路由到用户控件,以使用户控件能够处理 MFC 命令(例如,框架菜单项和工具栏按钮)。

用户控件使用 ICommandTarget::Initialize 在 m_CmdSrc 中存储对命令源对象的引用,如下例所示。 若要使用 ICommandTarget,需要添加对 mfcmifc80.dll 的引用。

CWinFormsView 通过将一些常见的 MFC 视图通知转发给托管用户控件来处理这些通知。 这些通知包括 IView InterfaceOnInitialUpdateOnUpdateOnActivateView 方法。

本主题假定您以前已经学完如何:创建用户控件并将它承载在对话框中如何:创建用户控件并承载 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 中的方法。

请参见

参考

ICommandSource Interface

ICommandTarget Interface

CommandHandler Delegate

其他资源

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