Mapas de eventos
Cada vez que un control desea notificar a su contenedor que se ha producido alguna acción (determinada por el desarrollador del control) (como una pulsación de tecla, un clic del mouse o un cambio en el estado del control), llama a una función de activación de eventos. Esta función notifica al contenedor de control que se ha producido alguna acción importante activando el evento relacionado.
La biblioteca de clases de Microsoft Foundation ofrece un modelo de programación optimizado para el lanzamiento de eventos. En este modelo, se usan «asignaciones de eventos» para designar qué funciones se activan qué eventos para un control determinado. Los mapas de eventos contienen una macro para cada evento. Por ejemplo, un mapa de eventos que activa un evento Click de stock podría tener este aspecto:
BEGIN_EVENT_MAP(CMyAxCtrl, COleControl)
EVENT_STOCK_CLICK()
END_EVENT_MAP()
La macro EVENT_STOCK_CLICK
indica que el control activará un evento Click de stock cada vez que detecte un clic del mouse. Para obtener una lista más detallada de otros eventos de existencias, consulta el artículo Controles ActiveX: Eventos. Las macros también están disponibles para indicar eventos personalizados.
Aunque las macros de mapa de eventos son importantes, por lo general no las inserta directamente. Esto se debe a que la ventana de propiedades (en la Vista de clase) crea automáticamente entradas de asignación de eventos en tus archivos fuente cuando la utilizas para asociar funciones de disparo de eventos con eventos. Siempre que desees editar o agregar una entrada de mapa de mensajes, puedes utilizar la ventana Propiedades.
Para admitir mapas de eventos, MFC proporciona las siguientes macros:
Macros de asignación de eventos
Declaración y demarcación de la asignación de eventos
Nombre | Descripción |
---|---|
DECLARE_EVENT_MAP | Declara que se usará un mapa de eventos en una clase para asignar eventos a funciones de activación de eventos (se deben usar en la declaración de clase). |
BEGIN_EVENT_MAP | Comienza la definición de una asignación de mensajes (debe usarse en la implementación de la clase). |
END_EVENT_MAP | Finaliza la definición de una asignación de mensajes (debe usarse en la implementación de la clase). |
Macros de asignación de eventos
Nombre | Descripción |
---|---|
EVENT_CUSTOM | Indica qué función de activación de eventos activará el evento especificado. |
EVENT_CUSTOM_ID | Indica qué función de activación de eventos activará el evento especificado, con un identificador de envío designado. |
Macros de asignación de mensajes
Nombre | Descripción |
---|---|
ON_OLEVERB | Indica un verbo personalizado controlado por el control OLE. |
ON_STDOLEVERB | Invalida una asignación de verbos estándar del control OLE. |
DECLARE_EVENT_MAP
Cada clase COleControl
derivada del programa puede proporcionar una asignación de eventos para especificar los eventos que desencadenará tu control.
DECLARE_EVENT_MAP()
Comentarios
Usa la macro DECLARE_DISPATCH_MAP al final de tu declaración de clase. A continuación, en el archivo .cpp que define las funciones miembro de la clase, usa la macro BEGIN_EVENT_MAP, las entradas de macro para cada uno de los eventos del control y la macro END_EVENT_MAP para declarar el final de la lista de eventos.
Para obtener más información sobre los mapas de eventos, consulta el artículo Controles ActiveX: Eventos.
Requisitos
Encabezado: afxctl.h
BEGIN_EVENT_MAP
Comienza la definición de la asignación de eventos de mensajes.
BEGIN_EVENT_MAP(theClass, baseClass)
Parámetros
theClass
Especifica el nombre de la clase de control cuyo mapa de eventos es.
baseClass
Especifica el nombre de clase base de theClass.
Comentarios
En el archivo de implementación (.cpp) que define las funciones miembro de la clase, inicia el mapa de eventos con la macro BEGIN_EVENT_MAP, agrega entradas de macro para cada uno de los eventos y complete el mapa de eventos con la macro END_EVENT_MAP.
Para obtener más información sobre las asignaciones de eventos y la macro BEGIN_EVENT_MAP, consulte el artículo Controles ActiveX: Eventos.
Requisitos
Encabezado: afxctl.h
END_EVENT_MAP
Usa la macro END_EVENT_MAP para finalizar la definición de la asignación de eventos.
END_EVENT_MAP()
Requisitos
Encabezado: afxctl.h
EVENT_CUSTOM
Define una entrada de asignación de eventos para un evento personalizado.
EVENT_CUSTOM(pszName, pfnFire, vtsParams)
Parámetros
pszName
El nombre del evento.
pfnFire
Nombre de la función de activación de eventos.
vtsParams
Lista separada por espacios de una o varias constantes que especifican la lista de parámetros de la función.
Comentarios
El parámetro vtsParams es una lista separada por espacios de valores de las constantes VTS_
. Uno o varios de estos valores, separados por espacios (no por comas), especifican la lista de parámetros de la función. Por ejemplo:
VTS_COLOR VTS_FONT
especifica una lista que contiene un entero de 32 bits que representa un valor de color RGB, seguido de un puntero a la interfaz IFontDisp
de un objeto de fuente OLE.
A continuación se indican las constantes VTS_
y el significado de cada una de ellas:
Símbolo | Parameter type (Tipo de parámetro) |
---|---|
VTS_I2 | short |
VTS_I4 | long |
VTS_R4 | float |
VTS_R8 | double |
VTS_COLOR | OLE_COLOR |
VTS_CY | DIVISA |
VTS_DATE | FECHA |
VTS_BSTR | const carbonizar* |
VTS_DISPATCH | LPDISPATCH |
VTS_FONT | IFontDispatch* |
VTS_HANDLE | HANDLE |
VTS_SCODE | SCODE |
VTS_BOOL | BOOL |
VTS_VARIANT | const VARIANT* |
VTS_PVARIANT | VARIANT* |
VTS_UNKNOWN | LPUNKNOWN |
VTS_OPTEXCLUSIVE | OLE_OPTEXCLUSIVE |
VTS_PICTURE | IPictureDisp* |
VTS_TRISTATE | OLE_TRISTATE |
VTS_XPOS_PIXELS | OLE_XPOS_PIXELS |
VTS_YPOS_PIXELS | OLE_YPOS_PIXELS |
VTS_XSIZE_PIXELS | OLE_XSIZE_PIXELS |
VTS_YSIZE_PIXELS | OLE_YSIZE_PIXELS |
TS_XPOS_HIMETRIC | OLE_XPOS_HIMETRIC |
VTS_YPOS_HIMETRIC | OLE_YPOS_HIMETRIC |
VTS_XSIZE_HIMETRIC | OLE_XSIZE_HIMETRIC |
VTS_YSIZE_HIMETRIC | OLE_YSIZE_HIMETRIC |
Nota:
Se han definido constantes variant adicionales para todos los tipos de variante, excepto VTS_FONT y VTS_PICTURE, que proporcionan un puntero a la constante de datos variant. A estas constantes se les asigna un nombre mediante la convención VTS_Pconstantname
. Por ejemplo, VTS_PCOLOR es un puntero a una constante VTS_COLOR.
Requisitos
Encabezado: afxctl.h
EVENT_CUSTOM_ID
Define una función de activación de eventos para un evento personalizado que pertenece al identificador de envío especificado por dispid.
EVENT_CUSTOM_ID(
pszName,
dispid,
pfnFire,
vtsParams)
Parámetros
pszName
El nombre del evento.
dispid
Identificador de distribución utilizado por el control al activar el evento.
pfnFire
Nombre de la función de activación de eventos.
vtsParams
Lista variable de parámetros pasados al contenedor de control cuando se desencadena el evento.
Comentarios
El argumento vtsParams es una lista separada por espacios de valores de las constantes VTS_
. Uno o varios de estos valores, separados por espacios (no por comas), especifican la lista de parámetros de la función. Por ejemplo:
VTS_COLOR VTS_FONT
especifica una lista que contiene un entero de 32 bits que representa un valor de color RGB, seguido de un puntero a la interfaz IFontDisp
de un objeto de fuente OLE.
Para obtener una lista de las VTS_
constantes, consulte EVENT_CUSTOM.
Requisitos
Encabezado: afxctl.h
ON_OLEVERB
Esta macro define una entrada de mapa de mensajes que asigna un verbo personalizado a una función miembro específica del control.
ON_OLEVERB(idsVerbName, memberFxn)
Parámetros
idsVerbName
Identificador de recurso de cadena del nombre del verbo.
memberFxn
Función a la que llama el marco cuando se invoca el verbo.
Comentarios
El editor de recursos se puede usar para crear nombres de verbo personalizados que se agregan a la tabla de cadenas.
El prototipo de función para memberFxn es:
BOOL memberFxn(
LPMSG lpMsg,
HWND hWndParent,
LPCRECT lpRect);
Los valores de los parámetros lpMsg, hWndParent y lpRect se toman de los parámetros correspondientes de la IOleObject::DoVerb
función miembro.
Requisitos
Encabezado afxole.h
ON_STDOLEVERB
Usa esta macro para invalidar el comportamiento predeterminado de un verbo estándar.
ON_STDOLEVERB(iVerb, memberFxn)
Parámetros
iVerb
Índice de verbo estándar para el verbo que se va a invalidar.
memberFxn
Función a la que llama el marco cuando se invoca el verbo.
Comentarios
El índice de verbo estándar tiene el formato OLEIVERB_
, seguido de una acción. OLEIVERB_SHOW, OLEIVERB_HIDE y OLEIVERB_UIACTIVATE son algunos ejemplos de verbos estándar.
Consulta ON_OLEVERB para obtener una descripción del prototipo de función que se va a usar como parámetro memberFxn.
Requisitos
Encabezado afxole.h