ActiveX 控件容器:处理 ActiveX 控件中的事件

本文讨论了如何使用“属性”窗口(在类视图中)在 ActiveX 控件容器中安装 ActiveX 控件的事件处理程序。 事件处理程序用于从某些事件的(控件)接收通知,并执行某些操作作为响应。 此通知被称为“触发”事件。

重要

ActiveX 是旧技术,不应用于新开发。 有关取代 ActiveX 的新式技术的详细信息,请参阅 ActiveX 控件

注意

本文使用一个名为 Container、基于对话框的 ActiveX 控件容器项目和一个名为 Circ 的嵌入控件分别作为过程和代码中的示例。

使用“属性”窗口中(在类视图中)的“事件”按钮,可以创建可在 ActiveX 控件容器应用程序中发生的事件的映射。 将事件处理程序添加到控件容器类时,此映射称为“事件接收器映射”,由 Visual C++ 创建和维护。 使用事件映射条目实现的每个事件处理程序都将特定事件映射到容器事件处理程序成员函数。 当 ActiveX 控件对象触发指定事件时,将调用此事件处理程序函数。

有关事件接收器映射的详细信息,请参阅类库参考中的事件接收器映射

对项目的事件处理程序修改

使用“属性”窗口添加事件处理程序时,在项目中声明和定义事件接收器映射。 以下语句添加到第一次添加事件处理程序时的控件 .CPP 文件。 此代码(在此示例中,CContainerDlg)中为对话框类声明事件接收器映射:

BEGIN_EVENTSINK_MAP(CContainerDlg, CDialog)
END_EVENTSINK_MAP()

使用“属性”窗口添加事件时,事件映射条目 (ON_EVENT) 添加到事件接收器映射,事件处理程序函数将添加到容器的实现 (.CPP) 文件。

以下示例为 Circ 控件的 ClickIn 事件声明名为 OnClickInCircCtrl 的事件处理程序:

BEGIN_EVENTSINK_MAP(CContainerDlg, CDialog)
ON_EVENT(CContainerDlg, IDC_CIRCCTRL1, 1 /* ClickIn */, OnClickInCircctrl1,
         VTS_I4 VTS_I4)
END_EVENTSINK_MAP()

此外,以下模板将添加到处理程序成员函数的 CContainerDlg 类实现 (.CPP) 文件:

BOOL CContainerDlg::OnClickInCircctrl1(OLE_XPOS_PIXELS nX, OLE_YPOS_PIXELS nY)
{
   // use nX and nY here
   TRACE(_T("nX = %d, nY = %d\n"), nX, nY);
   return TRUE;
}

有关事件接收器宏的详细信息,请参阅类库参考中的事件接收器映射

创建事件处理程序函数

  1. 从类视图中,选择包含 ActiveX 控件的对话框类。 对于本示例,请使用 CContainerDlg

  2. 在“属性”窗口中,单击“事件”按钮。

  3. “属性”窗口中,选择嵌入 ActiveX 控件的控件 ID。 对于本示例,请使用 IDC_CIRCCTRL1

    “属性”窗口显示可由嵌入 ActiveX 控件触发的事件列表。 粗体显示的任何成员函数都已为其分配了处理程序函数。

  4. 选择要处理对话框类的事件。 对于此示例,选择“点击”

  5. 从右侧的下拉列表框中,选择<“添加> ClickCircctrl1”

  6. 双击类视图中的新处理程序函数以跳转到 CContainerDlg 的实现 .CPP 文件中的事件处理程序代码。

另请参阅

ActiveX 控件容器