Ahora se agrega un ClickIn y un ClickOut evento al control ATL. Se activará la ClickIn evento si el usuario hace clic dentro del polígono y fuego ClickOut si el usuario hace clic fuera.
Cua&ndo se crea el control total en el paso 2, seleccionó la box.nbsp de verificación de Puntos de conexión de soporte ; Esto creó la IPolyCtlEvents interfaz en el archivo .idl. Tenga en cuenta que el nombre de interfaz comienza con un carácter de subrayado. Se trata de una Convención para indicar que la interfaz es una interfaz interna. Por lo tanto, pueden elegir programas que permiten examinar los objetos COM no se muestre la interfaz para el usuario. También aviso en el archivo .idl que Puntos de conexión de soporte agregado una línea para indicar que IPolyCtlEvents es la interfaz de origen predeterminado. El atributo source indica que el control es el origen de las notificaciones, por lo que llamará a esta interfaz en el contenedor.
Ahora debe agregar los métodos ClickIn y ClickOut para el IPolyCtlEvents interfaz:
IPolyCtlEvents en ClassView y seleccionar Agregar Method… en el menú emergente.void.ClickIn en el cuadro Nombre de método.[in] long x, [in] long y en el cuadro parámetros.
Compruebe el archivo .idl para comprobar que el código fue añadido como u&n método para la IPolyCtlEvents dispinterface.nbsp; A continuación, utilice el mismo procedimiento para definir un ClickOut método con los mismos parámetros y el tipo de valor devuelto. El dispinterface IPolyCtlEvents archivo .idl debe ahora este aspecto:
interfaz dispinterface _IPolyCtlEvents
{
propiedades:
métodos:
[grupos, helpstring ("método ClickIn")] void ClickIn (en largo x [en] y largo);
[id(2), helpstring ("método ClickOut")] void ClickOut (en largo x [en] y largo);
}
El ClickIn y ClickOut métodos que toman x e y coordenadas del punto seleccionado como parámetros.
Generar la biblioteca de tipos. Para ello puede reconstruir su proyecto o haga clic en el archivo .idl FileView y haga clic en Compilar Polygon.idl. Esto creará el archivo Polygon.tlb, que es la biblioteca de tipo.
A continuación, implementa una interfaz de punto de conexión y una interfaz de contenedor de puntos de conexión para el control. (En COM, eventos se implementan a través del mecanismo de puntos de conexión. Para recibir eventos de un objeto COM, un contenedor establece una conexión Consultiva al punto de conexión que implementa el objeto COM. Desde un objeto COM puede tener varios puntos de conexión, el objeto COM también implementa una interfaz de contenedor de puntos de conexión. A través de esta interfaz, el contenedor puede determinar qué puntos de conexión son compatibles.) La interfaz que implementa un punto de conexión se denomina IConnectionPoint y la interfaz que implementa un contenedor de punto de conexión es IConnectionPointContainer.
Para ayudar a implementar IConnectionPoint, utilice ClassView para acceder a un asistente de punto de conexión. Este asistente genera la interfaz IConnectionPoint por lectura de la biblioteca de tipos e implementar una función para cada evento que puede ser disparado.
Para ejecutar al asistente, siga estos pasos:

Si mira el archivo PolygonCP.h generado en FileView, observará que contiene una clase llamada CProxy_PolyCtlEvents que se deriva de IConnectionPointImpl. PolygonCP.h también define dos métodos Fire_ClickIn y Fire_ClickOut , que toman los dos parámetros de coordenadas. Estos son los métodos que se llama cuando desea un evento de control de incendios.
El asiste&nte también agrega el CProxy_PolyEvents y IConnectionPointContainerImpl a múltiples herencia list.nbsp del control; El asistente también expuesto IConnectionPointContainer le agregando las entradas adecuadas al mapa COM.
Termine de implementar el código para soportar eventos. Ahora, agregue código para los eventos de fuego en el momento oportuno. Recuerde, usted va a disparar un ClickIn o ClickOut evento cuando el usuario hace clic en el botón izquierdo del ratón en el control. Para saber cuando el usuario hace clic en el botón, primero agregue un controlador para el mensaje WM_LBUTTO&NDOWN . En ClassView, haga clic con el botón derecho en la clase CPolyCtl y seleccione Agregar Windows Message Handler... en el menu.nbsp de acceso directo; A continuación, seleccione WM_LBUTTONDOWN en la lista de la izquierda y haga clic en el botón Agregar controlador . Haga clic en Aceptar.
A continuación, agregar nuevo código a la función OnLButtonDown en PolyCtl.h (eliminar cualquier código colocado por el asistente) para que OnLButtonDown ahora este aspecto:
LRESULT CPolyCtl::OnLButtonDown(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOLamp; bHandled)
{
HRGN hRgn;
WORD xPos = LOWORD(lParam); / / horizontal posición del cursor
PALABRA yPos = HIWORD(lParam); / / vertical posición del cursor
CalcPoints(m_rcPos);
/ / Crear una región de nuestra lista de puntos
hRgn = CreatePolygonRgn (& m_arrPoint [0], m_nSides, SINUOSAS);
/ / Si el punto clicado se encuentra en nuestro polígono entonces fuego la ClickIn
/ / evento contrario desencadena el evento ClickOut
Si (PtInRegion (hRgn, xPos, yPos))
Fire_ClickIn (xPos, yPos);
otra cosa
Fire_ClickOut (xPos, yPos);
/ / Eliminar la región que hemos creado
DeleteObject(hRgn);
devuelven 0;
}
Desde ya han calculado los puntos del polígono en la OnDraw funcionar, utilizarlos en OnLButtonDown para crear una región. A continuación, utilice la función PtInRegion API para determinar si el punto seleccionado está dentro del polígono o no.
El uMsg parámetro es el ID del mensaje de Windows que se manejan. Esto le permite tener una función que controla una amplia gama de mensajes. La wParam y la lParam son los valores estándar para el mensaje que se maneja. El parámetro bHandled permite especificar si la función de controla el mensaje o no. De forma predeterminada, el valor se establece en TRUE para indicar que la función maneja el mensaje, pero puede establecer en falso. Hacerlo causará ATL seguir buscando otra función de controlador de mensaje al que desea enviar el mensaje.
Ahora pruebe sus eve&ntos. Generar el control y vuelva a iniciar el ActiveX Control Test Container . Esta vez, ver el registro de sucesos de window.nbsp; Para distribuir eventos a la ventana de salida, seleccione iniciar sesión en el menú Opciones y seleccione registro a la ventana de resultados. Ahora inserte el control y tratar de hacer clic en la ventana. Observe que ClickIn se desencadena si hace clic dentro del Polígono lleno y ClickOut se desencadena cuando haga clic fuera de él.
A continuación, agregará una página de propiedades.
Con el paso 4 |nbsp; Con el paso 6