事件映射
每当控件希望通知其容器一些操作(由控件开发人员确定)已发生(如键击、鼠标单击或对控件状态的更改)时,它将调用事件触发函数。 此函数通过触发相关事件通知控件容器一些重要的操作已发生。
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 | const 煳* |
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);
lpMsg、hWndParent 和 lpRect 参数的值取自 IOleObject::DoVerb
成员函数的相应参数。
要求
标头 afxole.h
ON_STDOLEVERB
使用此宏重写标准谓词的默认行为。
ON_STDOLEVERB(iVerb, memberFxn)
参数
iVerb
重写谓词的标准谓词索引。
memberFxn
框架在调用谓词时调用的函数。
注解
标准谓词索引格式为 OLEIVERB_
,后跟操作。 OLEIVERB_SHOW、OLEIVERB_HIDE 和 OLEIVERB_UIACTIVATE 是标准谓词的一些示例。
有关将用作 memberFxn 参数的函数原型的描述,请参阅 ON_OLEVERB。
要求
标头 afxole.h