CConnectionPoint

Klasa CConnectionPoint definiuje specjalny typ interfejsu używanego do komunikowania się z innymi obiektami OLE, o nazwie "punkt połączenia." W odróżnieniu od zwykłych interfejsów OLE, które są używane do wdrożenia i narazić funkcje formantu OLE, punkt połączenia implementuje interfejs wychodzący, który jest w stanie inicjować działania innych obiektów, takich jak wyzwalania zdarzenia i zmiany powiadomienia.

Połączenie składa się z dwóch części: obiekt wywołujący interfejs, o nazwie "Źródło", a obiekt wykonania interfejsu o nazwie "sink." Ekspozycję punktu połączenia, źródła pozwala pochłaniacze do ustanawiania połączeń do siebie. Za pośrednictwem mechanizmu punktu połączenia obiektu źródłowego uzyskuje wskaźnik do obiektu sink wykonania zestaw funkcji, Państwa. Na przykład na ogień implementowane przez obiekt sink zdarzenia, źródła może wywołać odpowiednią metodę realizacji obiekt sink.

Domyślnie, COleControl-pochodną klasy implementuje dwóch punktów połączeń: jeden dla zdarzeń i jeden dla właściwości zmiany powiadomienia. Połączenia te są stosowane, odpowiednio, dla zdarzeń wypalania i powiadamianie zlew (na przykład formantu kontenera) kiedy wartość właściwości została zmieniona. Wsparcie jest również dla formantów OLE do realizacji połączenia dodatkowe punkty. Dla każdego punktu dodatkowe połączenia realizowane w klasie formantu należy zadeklarować "" część połączenia", który implementuje punktu połączenia. Jeśli można zaimplementować jeden lub więcej punktów połączenia, można również należy zadeklarować singel "połączenie Mapa" w klasie kontroli.

W poniższym przykładzie zademonstrowano mapę prostego połączenia i punktu połączenia jednego dla Sample formantu OLE, składający się z dwóch fragmentów kodu: pierwsza część deklaruje mapę połączenia i punktu; drugi implementuje tej mapy i punkt. Pierwszy fragment jest wstawiany do deklaracji klasy kontroli w sekcji chronione

 nbsp;   / / Punkt połączenia dla interfejsu ISample
    BEGI&N_CONNECTION_PART (CSampleCtrl, SampleConnPt)
        CONNECTION_IID(IID_ISampleSink)
    END_CONNECTION_PART(SampleConnPt)

DECLARE_CONNECTION_MAP()

Makra BEGIN_CONNECTION_PART i END_CONNECTION_PART zadeklarować klasy osadzonego, XSampleConnPt (pochodzące z CConnectionPoint) który implementuje ten punkt określonego połączenia. Jeśli chcesz zastąpić wszystkie funkcje składowe CConnectionPoint lub dodać funkcje składowe własne, zadeklarować je między tymi dwoma makra. Na przykład makro CONNECTION_IID zastępuje funkcję Państwa CConnectionPoint::GetIID , umieszczone między tymi dwoma makra.

Drugi fragment kodu jest wstawiany do pliku implementacji (.CPP) klasy kontroli. Ten kod implementuje mapę połączenia, który zawiera punkt połączenia dodatkowe,SampleConnPt:

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

Po wstawieniu tych fragmentów kodu formantu OLE próbki udostępnia punkt połączenia dla interfejsu ISampleSink.

Zazwyczaj punkty połączeń obsługuje "multiemisji"; możliwość emisji do zlewów podłączonych do tego samego interfejsu. Poniższy fragment kodu ilustruje sposób osiągnąć multiemisji iteracja każdego obiektu sink na punkt połączenia:

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

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

W tym przykładzie Pobiera bieżący zestaw połączeń na SampleConnPt punktu połączenia z wywołania CConnectionPoint::GetConnections . Następnie dokonuje iteracji za pośrednictwem połączenia i wzywa ISampleSink::SinkFunc na każdym aktywne połączenie.

Aby uzyskać więcej informacji na temat używania CConnectionPoint, zobacz artykuł Connection Points w Visual C++ Programmer's Guide.

# include lt;afxctl.h>

Członkowie klasy |nbsp; Klasa podstawowa | Wykres hierarchii

Index