如何:向 Windows 窗体控件添加命令传送
更新:2007 年 11 月
CWinFormsView 将命令和更新命令 UI 消息路由到用户控件,以使用户控件能够处理 MFC 命令(例如,框架菜单项和工具栏按钮)。
用户控件使用 ICommandTarget::Initialize 在 m_CmdSrc 中存储对命令源对象的引用,如下例所示。若要使用 ICommandTarget,需要添加对 mfcmifc80.dll 的引用。
CWinFormsView 通过将一些常见的 MFC 视图通知转发给托管用户控件来处理这些通知。这些通知包括 IView Interface 的 OnInitialUpdate、OnUpdate 和 OnActivateView 方法。
创建 MFC 宿主应用程序
打开在 如何:创建用户控件并将它承载在对话框中 中创建的 Windows 窗体控件库。
通过以下方法来添加对 mfcmifc80.dll 的引用:在“解决方案资源管理器”中右击项目节点,选择“添加引用”,然后浏览至 Microsoft Visual Studio 8\VC\atlmfc\lib。
打开 UserControl1.Designer.cs 并添加下面的 using 语句:
using namespace 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("Got FILE_NEW"); }
打开在 如何:创建用户控件并将它承载在对话框中 中创建的 MFC 应用程序。
添加一个将调用 singleMenuHandler 的菜单选项。
转至“资源视图”(Ctrl+Shift+E),展开“菜单”文件夹,然后双击“IDR_MFC02TYPE”。这将显示菜单编辑器。
在“视图”菜单的底部添加一个菜单选项。 保存该文件。
在“解决方案资源管理器”中,打开 Resource.h 文件,复制刚添加的菜单选项的值,粘贴该值并将其用作 C# 项目的 Initialize 方法中 m_CmdSrc.AddCommandHandler 调用的第一个参数。
生成并运行此项目。
在“生成”菜单上,单击“生成解决方案”。
在“调试”菜单上,单击“开始执行(不调试)”。
选择已添加的菜单选项。请注意,此时将调用该 .dll 中的方法。