事件映射

每当控件希望通知其容器一些操作(由控件开发人员确定)已发生(如键击、鼠标单击或对控件状态的更改)时,它将调用事件触发函数。 此函数通过触发相关事件通知控件容器一些重要的操作已发生。

Microsoft 基础类库提供了针对触发事件而优化的编程模型。 在此模型中,“事件映射”用于为特殊控件指定哪些函数触发哪些事件。 事件映射包含每个事件的一个宏。 例如,触发常用 Click 事件的事件映射可能与下类似:

BEGIN_EVENT_MAP(CMyAxCtrl, COleControl)
EVENT_STOCK_CLICK()
END_EVENT_MAP()

EVENT_STOCK_CLICK 宏指示控件将在每次检测到鼠标单击时触发常用 Click 事件。 有关其他常用事件的更详细的列表,请参阅文章 ActiveX 控件:事件。 宏还可用于指示自定义事件。

虽然事件映射宏很重要,但您一般不会直接插入这些宏。 这是因为将“属性”窗口(类视图)中用于将事件触发函数与事件关联时,自动在源文件中创建时间映射条目。 每当需要编辑或添加事件映射条目时,均可使用“属性”窗口。

为了支持事件映射,MFC 提供了下列宏:

事件映射宏

事件映射声明和划分

名称 描述
DECLARE_EVENT_MAP 声明事件映射将在类中用于将事件映射到事件触发函数(必须在类声明中使用)。
BEGIN_EVENT_MAP 开始事件映射的定义(必须在类实现中使用)。
END_EVENT_MAP 结束事件映射的定义(必须在类实现中使用)。

事件映射宏

名称 描述
EVENT_CUSTOM 指示将触发指定事件的事件触发函数。
EVENT_CUSTOM_ID 使用指定调度 ID 指示将触发指定事件的事件触发函数。

消息映射宏

名称 描述
ON_OLEVERB 指示 OLE 控件处理的自定义谓词。
ON_STDOLEVERB 重写 OLE 控件的标准谓词映射。

DECLARE_EVENT_MAP

程序中的每个 COleControl 派生类都可以提供事件映射来指定控件将触发的事件。

DECLARE_EVENT_MAP()

备注

在类声明末尾使用 DECLARE_EVENT_MAP 宏。 然后,在定义类的成员函数的 .CPP 文件中,使用 BEGIN_EVENT_MAP 宏、每个控件事件的宏条目以及 END_EVENT_MAP 宏来声明事件列表的末尾。

有关事件映射的详细信息,请参阅文章 ActiveX 控件:事件

要求

标头:afxctl.h

BEGIN_EVENT_MAP

启动事件映射的定义。

BEGIN_EVENT_MAP(theClass,  baseClass)

参数

theClass
指定其事件映射的控件类的名称。

baseClass
指定 theClass 的基类的名称。

备注

在为类定义成员函数的实现 (.cpp) 文件中,使用 BEGIN_EVENTSINK_MAP 宏启动事件映射,然后为每个事件添加宏条目,并使用 END_EVENT_MAP 宏完成事件映射。

有关事件映射和 BEGIN_EVENT_MAP 宏的详细信息,请参阅 ActiveX 控件:事件一文。

要求

标头:afxctl.h

END_EVENT_MAP

使用 END_EVENT_MAP 宏结束事件映射的定义。

END_EVENT_MAP()

要求

标头:afxctl.h

EVENT_CUSTOM

定义自定义事件的事件映射条目。

EVENT_CUSTOM(pszName, pfnFire,  vtsParams)

参数

pszName
事件名称。

pfnFire
事件触发函数的名称。

vtsParams
由一个或多个常量组成的以空格分隔的列表,用于指定函数的参数列表。

备注

vtsParams 参数是一个由 VTS_ 常量组成的以空格分隔的列表。 用空格(而不是逗号)分隔的其中一个或多个值指定函数的参数列表。 例如:

VTS_COLOR VTS_FONT

指定一个列表,其中包含一个代表 RGB 颜色值的 32 位整数,后跟指向OLE 字体对象的 IFontDisp 接口的指针。

VTS_ 常量及其含义如下:

符号 参数类型
VTS_I2 short
VTS_I4 long
VTS_R4 float
VTS_R8 double
VTS_COLOR OLE_COLOR
VTS_CY 货币
VTS_DATE DATE
VTS_BSTR constchar*
VTS_DISPATCH LPDISPATCH
VTS_FONT IFontDispatch*
VTS_HANDLE HANDLE
VTS_SCODE SCODE
VTS_BOOL BOOL
VTS_VARIANT const VARIANT*
VTS_PVARIANT VARIANT*
VTS_UNKNOWN LPUNKNOWN
VTS_OPTEXCLUSIVE OLE_OPTEXCLUSIVE
VTS_PICTURE IPictureDisp*
VTS_TRISTATE OLE_TRISTATE
VTS_XPOS_PIXELS OLE_XPOS_PIXELS
VTS_YPOS_PIXELS OLE_YPOS_PIXELS
VTS_XSIZE_PIXELS OLE_XSIZE_PIXELS
VTS_YSIZE_PIXELS OLE_YSIZE_PIXELS
TS_XPOS_HIMETRIC OLE_XPOS_HIMETRIC
VTS_YPOS_HIMETRIC OLE_YPOS_HIMETRIC
VTS_XSIZE_HIMETRIC OLE_XSIZE_HIMETRIC
VTS_YSIZE_HIMETRIC OLE_YSIZE_HIMETRIC

注意

已为所有变体类型定义了其他变体常量,但 VTS_FONT 和 VTS_PICTURE 除外,它们提供了指向变体数据常量的指针。 这些常量使用 VTS_Pconstantname 约定命名。 例如,VTS_PCOLOR 是指向 VTS_COLOR 常量的指针。

要求

标头:afxctl.h

EVENT_CUSTOM_ID

为属于 dispid 指定的调度 ID 的自定义事件定义事件触发函数。

EVENT_CUSTOM_ID(
    pszName,
    dispid,
    pfnFire,
    vtsParams)

参数

pszName
事件名称。

dispid
触发事件时控件使用的调度 ID。

pfnFire
事件触发函数的名称。

vtsParams
触发事件时传递给控制容器的参数的变量列表。

注解

vtsParams 参数是一个由 VTS_ 常量的值组成的以空格分隔的列表。 其中一个或多个值(由空格(而不是逗号)分隔)指定函数的参数列表。 例如:

VTS_COLOR VTS_FONT

指定一个列表,其中包含一个代表 RGB 颜色值的 32 位整数,后跟指向OLE 字体对象的 IFontDisp 接口的指针。

有关 VTS_ 常量的列表,请参阅 EVENT_CUSTOM

要求

标头:afxctl.h

ON_OLEVERB

此宏定义将自定义谓词映射到控件的特定成员函数的消息映射条目。

ON_OLEVERB(idsVerbName,  memberFxn)

参数

idsVerbName
谓词名称的字符串资源 ID。

memberFxn
框架在调用谓词时调用的函数。

注解

资源编辑器可用于创建添加到字符串表的自定义谓词名称。

memberFxn 的函数原型为:

BOOL memberFxn(
   LPMSG    lpMsg,
   HWND     hWndParent,
   LPCRECT  lpRect);

lpMsghWndParentlpRect 参数的值取自 IOleObject::DoVerb 成员函数的相应参数。

要求

标头 afxole.h

ON_STDOLEVERB

使用此宏重写标准谓词的默认行为。

ON_STDOLEVERB(iVerb, memberFxn)

参数

iVerb
重写谓词的标准谓词索引。

memberFxn
框架在调用谓词时调用的函数。

注解

标准谓词索引格式为 OLEIVERB_,后跟操作。 OLEIVERB_SHOW、OLEIVERB_HIDE 和 OLEIVERB_UIACTIVATE 是标准谓词的一些示例。

有关将用作 memberFxn 参数的函数原型的描述,请参阅 ON_OLEVERB

要求

标头 afxole.h

另请参阅

宏和全局函数