Contenedores de controles ActiveX: Controlar eventos desde un control ActiveX
En este artículo se describe el uso de la ventana Propiedades (en Vista de clases) para instalar controladores de eventos para controles ActiveX en un contenedor de controles ActiveX. Los controladores de eventos se utilizan para recibir notificaciones (del control) de determinados eventos y realizar alguna acción en respuesta. Esta notificación se denomina "activar" el evento.
Importante
ActiveX es una tecnología heredada que no se debe usar para el nuevo desarrollo. Para más información sobre las tecnologías modernas que reemplazan a ActiveX, vea Controles ActiveX.
Nota:
Este artículo utiliza un proyecto de contenedor de controles ActiveX basado en diálogo denominado Container y un control incrustado denominado Circ como ejemplos en los procedimientos y el código.
Con el botón Eventos de la ventana Propiedades (en Vista de clases), puede crear un mapa de eventos que pueden ocurrir en su aplicación de contenedor de control ActiveX. Visual C++ crea y mantiene este mapa, denominado "mapas de receptor de eventos", al agregar controladores de eventos a la clase contenedora de control. Cada controlador de eventos, implementado con una entrada de mapa de eventos, asigna un evento específico a una función miembro del controlador de eventos de contenedor. Se llama a esta función de controlador de eventos cuando el objeto de control ActiveX activa el evento especificado.
Para obtener más información sobre los mapas de receptor de eventos, consulte Mapas de receptor de eventos en la Referencia de la biblioteca de clases.
Modificaciones del controlador de eventos al proyecto
Al usar la ventana Propiedades para agregar controladores de eventos, se declara y define un mapa de receptor de eventos en el proyecto. Las siguientes instrucciones se agregan al archivo de control .CPP la primera vez que se agrega un controlador de eventos. Este código declara un mapa de receptor de eventos para la clase de cuadro de diálogo (en este caso, CContainerDlg
):
BEGIN_EVENTSINK_MAP(CContainerDlg, CDialog)
END_EVENTSINK_MAP()
A medida que usa la ventana Propiedades para agregar eventos, se agrega una entrada de mapa de eventos (ON_EVENT
) al mapa de receptor de eventos y se agrega una función de controlador de eventos al archivo de implementación del contenedor (.CPP).
En el ejemplo siguiente se declara un controlador de eventos, denominado OnClickInCircCtrl
, para el evento de control Circ ClickIn
:
BEGIN_EVENTSINK_MAP(CContainerDlg, CDialog)
ON_EVENT(CContainerDlg, IDC_CIRCCTRL1, 1 /* ClickIn */, OnClickInCircctrl1,
VTS_I4 VTS_I4)
END_EVENTSINK_MAP()
Además, la siguiente plantilla se agrega al archivo de implementación de clase (.CPP) CContainerDlg
para la función miembro del controlador de eventos:
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;
}
Para obtener más información acerca de las macros de receptor de eventos, consulte Mapas de receptor de eventos en la Referencia de la biblioteca de clases.
Para crear una función de controlador de eventos
En Vista de clases, seleccione la clase de cuadro de diálogo que contiene el control ActiveX. En este ejemplo, use
CContainerDlg
.En la ventana Propiedades, haga clic en el botón Eventos.
En la ventana Propiedades, seleccione el ID de control del control ActiveX incrustado. En este ejemplo, use
IDC_CIRCCTRL1
.La ventana Propiedades muestra una lista de eventos que puede activar el control ActiveX integrado. Cualquier función miembro que se muestra en negrita ya tiene asignadas funciones de controlador.
Seleccione el evento que desea que maneje la clase de diálogo. En este ejemplo, seleccione Clic.
En el cuadro de lista desplegable de la derecha, seleccione <Agregar> ClickCircctrl1.
Haga doble clic en la nueva función de controlador de Vista de clases para ir al código del controlador de eventos en el archivo de implementación (.CPP) de
CContainerDlg
.