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
Publiczne konstruktory
Nazwa |
Opis |
---|---|
Konstrukcje CConnectionPoint obiektu. |
Metody publiczne
Nazwa |
Opis |
---|---|
Pobiera wszystkie punkty połączeń na mapie połączenia. |
|
Pobiera kontenera formantu, który jest właścicielem mapowania połączenia. |
|
Pobiera identyfikator interfejsu punktu połączenia. |
|
Pobiera maksymalnej liczby punktów połączeń obsługiwanych przez formant. |
|
Pobiera wskaźnik do elementu połączenia na pos. |
|
Uruchamia iteracji mapę przywracając stanowisko wartość przekazaną do GetNextConnection wywołania. |
|
Wywołana przez RAM przy ustanawianiu lub zerwania połączenia. |
|
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
CConnectionPoint
Wymagania
Nagłówek: afxdisp.h