如何:向 Windows 窗体控件添加命令传送
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# 项目的
Initialize
方法中的m_CmdSrc.AddCommandHandler
调用(如有必要,替换32771
)。生成并运行该项目。
在 “生成” 菜单上,单击 “生成解决方案” 。
在“调试”菜单上,单击“开始执行(不调试)”。
选择添加的菜单选项。 请注意,调用了 .dll 中的方法。
另请参阅
以 MFC 视图的形式承载 Windows 窗体用户控件
ICommandSource 接口
ICommandTarget 接口