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. 双击类视图中的新处理程序函数以跳转到实现中的事件处理程序代码()。的 CPP) 文件 CContainerDlg

另请参阅

ActiveX 控件容器