如何:向 Windows 窗体控件添加命令传送
CWinFormsView 将命令和更新命令 UI 消息路由到用户控件,以使用户控件能够处理 MFC 命令(例如,框架菜单项和工具栏按钮)。
用户控件使用 ICommandTarget::Initialize 在 m_CmdSrc 中存储对命令源对象的引用,如下例所示。 若要使用 ICommandTarget,需要添加对 mfcmifc80.dll 的引用。
CWinFormsView 通过将一些常见的 MFC 视图通知转发给托管用户控件来处理这些通知。 这些通知包括 IView接口 的 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# 项目的 Initialize 方法中 m_CmdSrc.AddCommandHandler 调用的第一个参数(如果需要,替换 32771)。
生成并运行该项目。
在**“生成”菜单上,单击“生成解决方案”**。
在**“调试”菜单上,单击“开始执行(不调试)”**。
选择已添加的菜单选项。 请注意,此时将调用该 .dll 中的方法。