委托和接口映射宏

MFC 支持用于委托和接口映射的这些宏:

名称 描述
BEGIN_DELEGATE_MAP 开始委托映射。
BEGIN_INTERFACE_MAP 开始接口映射的定义。
CommandHandler 委托 向命令源注册回调方法。
END_DELEGATE_MAP 结束委托映射。
END_INTERFACE_MAP 终止实现文件中的接口映射。
EVENT_DELEGATE_ENTRY 在委托映射中创建条目。
INTERFACE_PART 用于对象将支持的每个接口的 BEGIN_INTERFACE_MAP 宏和 END_INTERFACE_MAP 宏之间。
MAKE_DELEGATE 将事件处理程序附加到托管控件。

BEGIN_DELEGATE_MAP

开始委托映射。

语法

BEGIN_DELEGATE_MAP(  CLASS );

参数

CLASS
托管控件所在的类。

备注

此宏标记了委托条目列表的开头,这些条目组成了一个委托映射。 有关如何使用此宏的示例,请参阅 EVENT_DELEGATE_ENTRY

要求

标头:msclr\event.h

BEGIN_INTERFACE_MAP

在实现文件中使用时开始接口映射的定义。

语法

BEGIN_INTERFACE_MAP( theClass, baseClass )

参数

theClass
要在其中定义接口映射的类

baseClass
theClass 派生自的类

备注

对于实现的每个接口,有一个或多个 INTERFACE_PART 宏调用。 对于类使用的每个聚合,有一个 INTERFACE_AGGREGATE 宏调用。

有关接口映射的详细信息,请参阅技术说明 38

要求

标头:afxwin.h

CommandHandler 委托

向命令源注册回调方法。

语法

delegate void CommandHandler(  UINT^ cmdID  );

参数

cmdID
命令 ID。

注解

此委托将向命令源注册回调方法。 当您将一个委托添加到命令源对象时,回调方法将成为来自指定源的命令的处理程序。

有关详细信息,请参阅如何:将命令路由添加到 Windows 窗体控件

有关使用 Windows 窗体的详细信息,请参阅在 MFC 中使用 Windows 窗体用户控件

要求

标头:afxwinforms.h(在程序集 atlmfc\lib\mfcmifc80.dll 中定义)

CommandUIHandler

使用用户界面更新命令消息注册回调方法。

语法

delegate void CommandUIHandler(  unsigned int cmdID, ICommandUI^ cmdUI);

参数

cmdID
命令 ID。

cmdUI
命令消息 ID。

备注

此委托使用用户界面更新命令消息注册回调方法。 CommandUIHandlerCommandHandler 类似,但此委托与用户界面对象更新命令一起使用。 用户界面更新命令应与消息处理程序方法一对一映射。

有关使用 Windows 窗体的详细信息,请参阅在 MFC 中使用 Windows 窗体用户控件

要求

标头:afxwinforms.h(在程序集 atlmfc\lib\mfcmifc80.dll 中定义)

END_DELEGATE_MAP

结束委托映射。

语法

END_DELEGATE_MAP();

备注

此宏标记了委托条目列表的结尾,这些条目组成了一个委托映射。 有关如何使用此宏的示例,请参阅 EVENT_DELEGATE_ENTRY

要求

标头:msclr\event.h

END_INTERFACE_MAP

终止实现文件中的接口映射。

语法

END_INTERFACE_MAP( )

备注

有关接口映射的详细信息,请参阅技术说明 38

要求

标头:afxwin.h

EVENT_DELEGATE_ENTRY

在委托映射中创建条目。

语法

EVENT_DELEGATE_ENTRY(MEMBER, ARG0, ARG1);

参数

MEMBER
要附加到控件的事件处理程序方法。

ARG0
托管事件处理程序方法的第一个参数,如 Object^

ARG1
托管事件处理程序方法的第二个参数,如 EventArgs^

备注

委托映射中的每个条目都对应于一个由 MAKE_DELEGATE 创建的托管事件处理程序委托。

示例

以下代码示例显示如何使用 EVENT_DELEGATE_ENTRY 在委托映射中为 OnClick 事件处理程序创建一个条目;另请参阅 MAKE_DELEGATE 中的代码示例。 有关详细信息,请参阅如何:接收来自本机 C++ 类的 Windows 窗体事件

BEGIN_DELEGATE_MAP(CMyView)
   EVENT_DELEGATE_ENTRY(OnClick, System::Object^, System::EventArgs^)
END_DELEGATE_MAP()

要求

标头:msclr\event.h

INTERFACE_PART

用于对象将支持的每个接口的 BEGIN_INTERFACE_MAP 宏和 END_INTERFACE_MAP 宏之间。

语法

INTERFACE_PART( theClass, iid, localClass)

参数

theClass
包含接口映射的类的名称。 iid
要映射到嵌入类的 IID。 localClass
本地类的名称。

备注

它让你能够将 IID 映射到 theClass 和 localClass 指示的类成员

有关接口映射的详细信息,请参阅技术说明 38

要求

标头:afxwin.h

MAKE_DELEGATE

将事件处理程序附加到托管控件。

语法

MAKE_DELEGATE( DELEGATE,  MEMBER) ;

参数

DELEGATE
托管事件处理程序委托的类型,例如 EventHandler

MEMBER
要附加到控件的事件处理程序方法的名称。

备注

此宏创建类型为 DELEGATE 且名称为 MEMBER 的托管事件处理程序委托。 托管事件处理程序委托允许本机类处理托管事件。

示例

以下代码示例显示如何调用 MAKE_DELEGATE 以将 OnClick 事件处理程序附加到 MFC 控件 MyControl。 有关此宏如何在 MFC 应用程序中工作的更详尽说明,请参阅如何:接收来自本机 C++ 类的 Windows 窗体事件

// CMyView derives from CWinFormsView.
void CMyView::OnInitialUpdate()
{
   CWinFormsView::OnInitialUpdate();

   GetControl()->Click += MAKE_DELEGATE(System::EventHandler, OnClick);
}

要求

标头:msclr\event.h

另请参阅

如何:接收来自本机 C++ 类的 Windows 窗体事件
如何:向 Windows 窗体控件添加命令传送
宏和全局函数