CWinFormsView 将命令和更新命令 UI 消息路由到用户控件,以允许它处理 MFC 命令(例如帧菜单项和工具栏按钮)。
用户控件使用 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# 项目的 方法中的 - m_CmdSrc.AddCommandHandler调用(如有必要,替换- Initialize)- 32771。
- 生成并运行该项目。 - 在 “生成” 菜单上,单击 “生成解决方案” 。 - 在“调试”菜单上,单击“开始执行(不调试)”。 - 选择添加的菜单选项。 请注意,调用了 .dll 中的方法。 
另请参阅
              以 MFC 视图的形式承载 Windows 窗体用户控件
              ICommandSource 接口
              ICommandTarget 接口