CConnectionPoint

La clase CConnectionPoint define un tipo especial de interfaz que se utiliza para comunicarse con otros objetos OLE, denominados "punto de conexión". A diferencia de las interfaces OLE normales, que se utilizan para implementar y exponer la funcionalidad de un control OLE, un punto de conexión implementa una interfaz saliente que es capaz de iniciar acciones en otros objetos, tales como disparar eventos y notificaciones de cambio.

Una conexión consta de dos partes: el objeto de llamar a la interfaz, llamada la "fuente" y el objeto que implementa la interfaz, llamado el "receptor". Al exponer un punto de conexión, una fuente permite sumideros establecer conexiones a sí mismo. A través del mecanismo de punto de conexión, un objeto de origen obtiene un puntero a la aplicación del receptor de un conjunto de funciones miembro. Por ejemplo, para desencadenar un evento implementado por el receptor, el origen puede llamar al método correspondiente de la aplicación del receptor.

De forma predeterminada, un COleControl-clase derivada implementa dos puntos de conexión: uno para eventos y uno de propiedad de las notificaciones de cambio. Estas conexiones se utilizan, respectivamente, para el desencadenamiento de eventos y para notificar a un receptor (por ejemplo, el contenedor del control) cuando un valor de la propiedad ha cambiado. También se proporciona soporte para que controles OLE implementar puntos de conexión adicionales. Para cada punto de conexión adicional implementado en la clase del control, debe declarar una "pieza de conexión" que implementa el punto de conexión. Si decide implementar uno o más puntos de conexión, también necesita declarar un único "mapa de conexión" en la clase del control.

En el ejemplo siguiente se muestra un mapa de conexión simple y un punto de conexión para el Sample control OLE, que consta de dos fragmentos de código: la primera parte declara el mapa de conexión y punto; el segundo implementa este mapa y punto. El primer fragmento se inserta en la declaración de la clase control, bajo la sección protegida

 nbsp;   / / Punto de conexión de interfaz ISample
    BEGI&N_CONNECTION_PART (CSampleCtrl, SampleConnPt)
        CONNECTION_IID(IID_ISampleSink)
    END_CONNECTION_PART(SampleConnPt)

DECLARE_CONNECTION_MAP()

Las macros BEGIN_CONNECTION_PART y END_CONNECTION_PART declaran una clase incrustada, XSampleConnPt (derivado de CConnectionPoint) que implementa este punto de conexión en particular. Si desea reemplazar las funciones de miembro de CConnectionPoint o agregar funciones miembro de su propia, declararlos entre estas dos macros. Por ejemplo, la macro CONNECTION_IID reemplaza la función de miembro de CConnectionPoint::GetIID cuando se coloca entre estas dos macros.

El segundo fragmento de código se inserta en el archivo de implementación (.CPP) de la clase del control. Este código implementa el mapa de conexión, que incluye el punto de conexión adicionales,SampleConnPt:

BEGI&N_CONNECTION_MAP (CSampleCtrl, COleControl)
 nbsp;  CONNECTION_PART (CSampleCtrl, IID_ISampleSink, SampleConnPt)
END_CONNECTION_MAP()

Una vez que se han insertado estos fragmentos de código, el control muestra OLE expone un punto de conexión de la interfaz de ISampleSink.

Normalmente, los puntos de conexión admiten la "multidifusión"; la capacidad de transmisión a múltiples receptores conectados a la misma interfaz. El siguiente fragmento de código muestra cómo realizar la multidifusión por recorrer cada receptor en un punto de conexión:

void CSampleCtrl::CallSinkFunc()
{
 nbsp;  const CPtrArray * pConnections = m_xSampleConnPt.GetConnections();
    ASSERT (pConnections! = NULL);

int cConnections = pConnections - > GetSize();
    ISampleSink * pSampleSink;
    para (int i = 0; i < cConnections; i ++)
    {
        pSampleSink = (ISampleSink *) (pConnections - > GetAt(i));
        ASSERT (pSampleSink! = NULL);
        pSampleSink - > SinkFunc();
    }
}

Este ejemplo recupera el conjunto actual de conexiones en la SampleConnPt punto de conexión con una llamada a CConnectionPoint::GetConnections . A continuación, recorre en iteración a través de las conexiones y las llamadas ISampleSink::SinkFunc en cada conexión activa.

Para obtener más información sobre el uso de CConnectionPoint, consulte el artículo Puntos de conexión en la Guía del programador de Visual C++.

# include lt;afxctl.h>

Miembros de la clase |nbsp; Clase base | Diagrama de jerarquía

Index