CConnectionPoint

La classe CConnectionPoint definisce un particolare tipo di interfaccia utilizzata per comunicare con altri oggetti OLE, chiamati un "punto di connessione". A differenza dei normali interfacce OLE, che vengono utilizzate per implementare ed esporre le funzionalità di un controllo OLE, un punto di connessione implementa un'interfaccia in uscita che è in grado di avviare azioni su altri oggetti, come ad esempio gli eventi e notifiche di modifica.

Una connessione consiste di due parti: l'oggetto chiamando l'interfaccia, chiamata la "fonte" e l'oggetto che implementa l'interfaccia, chiamato il "sink". Esponendo un punto di connessione, una fonte permette di pozzi stabilire connessioni a se stesso. Attraverso il meccanismo dei punti di connessione, un oggetto di origine ottiene un puntatore alla implementazione del sink di un insieme di funzioni membro. Ad esempio, per generare un evento implementato dal sink, l'origine può chiamare il metodo appropriato dell'implementazione del sink.

Per impostazione predefinita, un COleControl-classe derivata implementa due punti di connessione: uno per eventi e una proprietà di notifiche di modifica. Questi collegamenti vengono utilizzati, rispettivamente, per la cottura di evento e per la notifica di un sink (ad esempio, il contenitore del controllo) quando un valore della proprietà è cambiato. Il supporto è fornito anche per i controlli OLE implementare i punti di connessione aggiuntivi. Per ogni punto di connessione aggiuntiva implementata nella classe control, è necessario dichiarare una "parte di connessione" che implementa il punto di connessione. Se si implementano uno o più punti di connessione, è inoltre necessario dichiarare un singolo "mappa di connessione" nella classe del controllo.

L'esempio seguente dimostra una connessione semplice mappa e punto di una connessione per la Sample controllo OLE, costituito da due frammenti di codice: la prima parte dichiara la mappa di connessione e il punto; il secondo implementa questa mappa e punto. Il primo frammento viene inserito nella dichiarazione della classe control, sotto la sezione protetta

 nbsp;   / / Punto di connessione per interfaccia ISample
    BEGI&N_CONNECTION_PART (mappa, SampleConnPt)
        CONNECTION_IID(IID_ISampleSink)
    END_CONNECTION_PART(SampleConnPt)

DECLARE_CONNECTION_MAP()

Le macro BEGIN_CONNECTION_PART ed END_CONNECTION_PART dichiarano una classe incorporata, XSampleConnPt (derivato da CConnectionPoint) che implementa questo punto particolare connessione. Se si desidera eseguire l'override di tutte le funzioni membro di CConnectionPoint , o aggiungere funzioni membro di tua scelta, dichiararli tra queste due macro. Ad esempio, la macro CONNECTION_IID esegue l'override della funzione membro CConnectionPoint::GetIID quando posta tra queste due macro.

Il secondo frammento di codice viene inserito nel file di implementazione (.CPP) della classe del controllo. Questo codice implementa la mappa di connessione, che include il punto di connessione aggiuntivi,SampleConnPt:

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

Una volta che questi frammenti di codice sono stati inseriti, il campione OLE controllo espone un punto di connessione per l'interfaccia ISampleSink.

In genere, i punti di connessione supportano il "multicast"; la capacità a trasmettere in multiple dispersori collegato alla stessa interfaccia. Frammento di codice seguente viene illustrato come eseguire il multicasting scorrendo ogni sink sul punto di connessione:

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

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

Questo esempio viene recuperato l'insieme corrente di connessioni sul SampleConnPt punto di connessione con una chiamata a CConnectionPoint::GetConnections . Quindi esso scorre le connessioni e le chiamate ISampleSink::SinkFunc su ogni connessione attiva.

Per ulteriori informazioni sull'utilizzo di CConnectionPoint, vedere l'articolo I punti di connessione nel manuale del programmatore di Visual C++.

# include lt;afxctl.h>

Membri della classe |nbsp; Classe base | Gerarchia Chart

Index