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

本文在 Activex 控件容器讨论使用 " 属性 " 窗口安装 Activex 控件的事件处理程序。事件处理程序在响应用于接收通知 (从控件) 一些事件和执行某些操作。此通知称为 “激发”该事件。

说明说明

本文在过程和代码使用基于对话框的 Activex 控件容器项目命名的 Container 和作为示例名为的 Circ 嵌入式控件。

使用 " 事件 " 按钮在 " 属性 " 窗口,可以创建您的 Activex 控件容器应用程序可能发生的事件的映射。此映射,称为 “事件接收器映射,”由 Visual C++ 创建并维护,当添加事件处理程序添加到控件容器类时。每个事件处理程序,实现具有事件映射项,映射特定事件为容器事件处理程序成员函数。,当指定的事件由 Activex 控件对象时,将激发此事件处理程序函数调用。

有关事件接收器映射的更多信息,请参见 类库参考 事件接收器映射

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

当您使用 " 属性 " 窗口添加事件处理程序时,事件接收器映射在项目中声明和定义。,第一个事件处理程序中,添加以下语句添加到控件 .CPP 文件。此代码声明对话框类的 (在这种情况下, CContainerDlg) 事件接收器映射:

BEGIN_EVENTSINK_MAP(CContainerDlg, CDialog)


...


END_EVENTSINK_MAP()

当您使用 " 属性 " 窗口中添加事件,事件映射项 (ON_EVENT) 添加到事件接收器映射和函数被添加到容器的实现的事件处理程序 (.CPP) 文件。

下面的示例声明事件处理程序中,调用 OnClickInCircCtrl, Circ 控件的 ClickIn 事件的:

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 控件容器