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

更新:2007 年 11 月

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

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

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

创建 MFC 宿主应用程序

  1. 打开在 如何:创建用户控件并将它承载在对话框中 中创建的 Windows 窗体控件库。

  2. 通过以下方法来添加对 mfcmifc80.dll 的引用:在“解决方案资源管理器”中右击项目节点,选择“添加引用”,然后浏览至 Microsoft Visual Studio 8\VC\atlmfc\lib。

  3. 打开 UserControl1.Designer.cs 并添加下面的 using 语句:

    using namespace 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("Got FILE_NEW");
    }
    
  7. 打开在 如何:创建用户控件并将它承载在对话框中 中创建的 MFC 应用程序。

  8. 添加一个将调用 singleMenuHandler 的菜单选项。

    转至“资源视图”(Ctrl+Shift+E),展开“菜单”文件夹,然后双击“IDR_MFC02TYPE”。这将显示菜单编辑器。

    在“视图”菜单的底部添加一个菜单选项。 保存该文件。

    在“解决方案资源管理器”中,打开 Resource.h 文件,复制刚添加的菜单选项的值,粘贴该值并将其用作 C# 项目的 Initialize 方法中 m_CmdSrc.AddCommandHandler 调用的第一个参数。

  9. 生成并运行此项目。

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

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

    选择已添加的菜单选项。请注意,此时将调用该 .dll 中的方法。

请参见

参考

ICommandSource Interface

ICommandTarget Interface

CommandHandler Delegate

其他资源

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