Udostępnij za pośrednictwem


Klasa CConnectionPoint

Definiuje specjalny typ interfejsu używanego do komunikacji z innymi obiektami OLE o nazwie "punkt połączenia".

class CConnectionPoint : public CCmdTarget

Członkowie

600taxa7.collapse_all(pl-pl,VS.110).gifPubliczne konstruktory

Nazwa

Opis

CConnectionPoint::CConnectionPoint

Konstrukcje CConnectionPoint obiektu.

600taxa7.collapse_all(pl-pl,VS.110).gifMetody publiczne

Nazwa

Opis

CConnectionPoint::GetConnections

Pobiera wszystkie punkty połączeń na mapie połączenia.

CConnectionPoint::GetContainer

Pobiera kontenera formantu, który jest właścicielem mapowania połączenia.

CConnectionPoint::GetIID

Pobiera identyfikator interfejsu punktu połączenia.

CConnectionPoint::GetMaxConnections

Pobiera maksymalnej liczby punktów połączeń obsługiwanych przez formant.

CConnectionPoint::GetNextConnection

Pobiera wskaźnik do elementu połączenia na pos.

CConnectionPoint::GetStartPosition

Uruchamia iteracji mapę przywracając stanowisko wartość przekazaną do GetNextConnection wywołania.

CConnectionPoint::OnAdvise

Wywołana przez RAM przy ustanawianiu lub zerwania połączenia.

CConnectionPoint::QuerySinkInterface

Pobiera wskaźnika do interfejsu żądany obiekt sink.

Uwagi

W odróżnieniu od normalnych interfejsów OLE, które są używane do wdrożenia i narazić funkcje formantu OLE, punkt połączenia implementuje interfejs wychodzących, który jest w stanie inicjować działania na innych obiektów, wyzwalania zdarzenia i powiadomienia o zmianach.

Połączenie składa się z dwóch części: obiekt wywołujący interfejsu o nazwie "źródło" i obiekt wykonawczych interfejsu o nazwie "sink." Podnosiły punktu połączenia, źródło umożliwia pochłaniacze do ustanawiania połączeń do siebie.Poprzez mechanizm punktu połączenia obiektu źródłowego uzyskuje wskaźnik realizacji sink zestaw funkcji elementów członkowskich.Na przykład ognia implementowane przez obiekt sink zdarzenia, źródło może wywołać odpowiedniej metody implementacji obiektu sink.

Domyślnie COleControl-pochodna klasy implementuje dwóch punktów połączeń: jeden dla zdarzeń i jeden dla właściwości powiadomienia o zmianach.Połączenia te są używane, odpowiednio dla wypalania zdarzeń i powiadamianie sink (na przykład formantu kontenera), kiedy wartość właściwości zmienił.Również wsparcie dla formantów OLE zaimplementować połączenia dodatkowe punkty.Dla każdego punktu połączenia dodatkowe zaimplementowana w klasie kontroli 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, należy zadeklarować pojedynczego "Mapa połączenia" w klasie kontroli.

Poniższy przykład ilustruje mapę prostego połączenia i punkt połączenia jednego Sample formantu OLE, składający się z dwóch fragmentów kodu: pierwsza część deklaruje mapę połączenia i punkt; drugi implementuje tej mapy i punkt.Pierwszy fragment jest wstawiany do deklaracji klasy kontroli pod protected sekcji:

// Connection point for ISample interface
 BEGIN_CONNECTION_PART(CMyClass, SampleConnPt)
     CONNECTION_IID(IID_ISampleSink)
 END_CONNECTION_PART(SampleConnPt)

 DECLARE_CONNECTION_MAP()

BEGIN_CONNECTION_PART i END_CONNECTION_PART makr zadeklarować klasy osadzonego XSampleConnPt (pochodzące z CConnectionPoint) który implementuje ten punkt określonego połączenia.Aby przesłonić CConnectionPoint funkcji elementów członkowskich lub dodać funkcje składowe własny, oświadczają, między te dwa makra.Na przykład CONNECTION_IID zastępuje makra CConnectionPoint::GetIID Członkowskich funkcji umieszczone między te dwa makra.

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

BEGIN_CONNECTION_MAP(CMyClass, CCmdTarget)
    CONNECTION_PART(CMyClass, IID_ISampleSink, SampleConnPt)
END_CONNECTION_MAP()

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

Zazwyczaj punktów połączenia obsługi "multiemisji", który jest możliwość emisji do zlewów podłączone do tego samego interfejsu.Następujący fragment kodu ilustruje sposób osiągnąć multiemisji przez iteracja każdego zbiornika na punkt połączenia:

void CMyClass::CallSinkFunc()
{
    POSITION pos = m_xSampleConnPt.GetStartPosition();
    ISampleSink* pSampleSink;
    while( pos != NULL )
    {
        pSampleSink = (ISampleSink*)(m_xSampleConnPt.GetNextConnection(pos));
        if(pSampleSink != NULL)
            pSampleSink->SinkFunc();
    }
}

W tym przykładzie pobiera bieżący zestaw połączeń na SampleConnPt punkt połączenia wywołania CConnectionPoint::GetConnections.Następnie dokonuje iteracji za pośrednictwem połączenia i wywołania ISampleSink::SinkFunc dla każdego aktywnego połączenia.

Aby uzyskać więcej informacji na temat używania CConnectionPoint, zobacz artykuł Punktów połączenia.

Hierarchii dziedziczenia

CObject

CCmdTarget

CConnectionPoint

Wymagania

Nagłówek: afxdisp.h

Zobacz też

Informacje

Klasa CCmdTarget

Wykres hierarchii