本文讨论使用属性窗口安装 ActiveX 控件的事件处理程序中的 ActiveX 控件容器。 事件处理程序中响应用于接收通知 (来自控件) 某些事件并执行一些操作。 此通知调用“激发”事件。
备注
本文中的过程和代码使用一个基于对话框的 ActiveX 控件容器项目命名的容器和作为示例中名为的 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;
}
有关宏事件接收器的更多信息,请参见位于 类库参考中事件接收器会映射。
创建事件处理函数
从"类视图"中,选择包含 ActiveX 控件的对话框类。 对于此例,请使用 CContainerDlg。
在“属性”窗口中单击**“事件”**按钮。
在属性窗口中,选择的 ActiveX 控件嵌入的控件 ID。 对于此例,请使用 IDC_CIRCCTRL1。
属性窗口显示可由嵌入一个 ActiveX 控件激发事件的列表。 以粗体显示的所有成员函数已经有处理程序函数分配给它。
选择希望对话框类处理事件。 对于此示例,选择 单击。
从右边的下拉列表框中,选择 <Add ClickCircctrl1> 。
双击类从视图的新处理程序函数跳转到 CContainerDlg实现 (.cpp) 文件中的事件处理程序代码。