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;
}
有关事件接收器宏的更多信息,请参见 类库参考 事件接收器映射。
创建事件处理程序函数
从类视图中,选择包含 Activex 控件的对话框类。对于此示例,请使用 CContainerDlg。
在“属性”窗口中单击**“事件”**按钮。
在 " 属性 " 窗口中,选择嵌入 Activex 控件 ID。对于此示例,请使用 IDC_CIRCCTRL1。
" 属性 " 窗口中显示可由嵌入 Activex 控件激发事件的列表。以粗体显示的所有成员函数已经有一个处理程序函数分配给它。
选择要对话框类处理的事件。对于此示例,选择 单击。
从右边的下拉列表框中,选择 添加 ClickCircctrl1。
双击从类视图的新处理程序函数跳转到 CContainerDlg实现 (.CPP) 文件的事件处理程序代码。