Sdílet prostřednictvím


CConnectionPoint – třída

Definuje speciální typ rozhraní, které se používá ke komunikaci s jinými objekty OLE, označované jako "spojovací bod".

Syntaxe

class CConnectionPoint : public CCmdTarget

Členové

Veřejné konstruktory

Jméno popis
C Připojení ionPoint::C Připojení ionPoint CConnectionPoint Vytvoří objekt.

Veřejné metody

Jméno popis
C Připojení ionPoint::Get Připojení ions Načte všechny spojovací body v mapě připojení.
C Připojení ionPoint::GetContainer Načte kontejner ovládacího prvku, který vlastní mapování připojení.
C Připojení ionPoint::GetIID Načte ID rozhraní spojovacího bodu.
C Připojení ionPoint::GetMax Připojení ions Načte maximální počet spojovacích bodů, které ovládací prvek podporuje.
C Připojení ionPoint::GetNext Připojení ion Načte ukazatel na spojovací prvek v pos.
C Připojení ionPoint::GetStartPosition Spustí iteraci mapy vrácením hodnoty POSITION, kterou lze předat GetNextConnection volání.
C Připojení ionPoint::OnAdvise Volá se rozhraním při navazování nebo přerušení připojení.
C Připojení ionPoint::QuerySinkInterface Načte ukazatel na požadované rozhraní jímky.

Poznámky

Na rozdíl od normálních rozhraní OLE, která se používají k implementaci a zveřejnění funkcí ovládacího prvku OLE, spojovací bod implementuje odchozí rozhraní, které je schopné zahájit akce na jiných objektech, například aktivaci událostí a oznámení o změnách.

Připojení se skládá ze dvou částí: objekt, který volá rozhraní, označovaný jako "zdroj", a objekt implementuje rozhraní označovaný jako "jímka". Zveřejněním spojovacího bodu zdroj umožňuje jímce navazovat připojení k sobě. Prostřednictvím mechanismu spojovacího bodu získá zdrojový objekt ukazatel na implementaci jímky sady členských funkcí. Pokud například chcete aktivovat událost implementovanou jímkou, zdroj může volat příslušnou metodu implementace jímky.

Ve výchozím nastavení COleControlimplementuje -odvozená třída dva spojovací body: jeden pro události a jeden pro oznámení o změnách vlastností. Tato připojení se používají k aktivaci událostí a k upozorňování jímky (například kontejneru ovládacího prvku) při změně hodnoty vlastnosti. K dispozici je také podpora pro ovládací prvky OLE pro implementaci dalších spojovacích bodů. Pro každý další spojovací bod implementovaný ve vaší třídě ovládacího prvku musíte deklarovat "část připojení", která implementuje spojovací bod. Pokud implementujete jeden nebo více spojovacích bodů, musíte ve své třídě ovládacího prvku deklarovat také jednu "mapu připojení".

Následující příklad ukazuje jednoduchou mapu připojení a jeden spojovací bod pro Sample ovládací prvek OLE, který se skládá ze dvou fragmentů kódu: první část deklaruje mapování připojení a bod; druhý implementuje toto mapování a bod. První fragment se vloží do deklarace třídy ovládacího prvku v protected části:

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

DECLARE_CONNECTION_MAP()

Makra BEGIN_CONNECTION_PART a END_CONNECTION_PART deklarují vloženou třídu XSampleConnPt (odvozenou z CConnectionPoint), která implementuje tento konkrétní spojovací bod. Pokud chcete přepsat všechny CConnectionPoint členské funkce nebo přidat vlastní členské funkce, deklarujte je mezi těmito dvěma makry. Například makro CONNECTION_IID přepíše CConnectionPoint::GetIID členovu funkci při umístění mezi těmito dvěma makry.

Druhý fragment kódu se vloží do souboru implementace (. CPP) vaší třídy řízení. Tento kód implementuje mapu připojení, která zahrnuje další spojovací bod: SampleConnPt

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

Po vložení těchto fragmentů kódu zobrazí ukázkový ovládací prvek OLE spojovací bod pro ISampleSink rozhraní.

Spojovací body obvykle podporují "vícesměrové vysílání", což je schopnost vysílat do více jímek připojených ke stejnému rozhraní. Následující fragment kódu ukazuje, jak provést vícesměrové vysílání iterací přes každou jímku v spojovacím bodu:

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

Tento příklad načte aktuální sadu připojení v spojovacím SampleConnPt bodu s voláním CConnectionPoint::GetConnections. Pak iteruje prostřednictvím připojení a volá ISampleSink::SinkFunc každé aktivní připojení.

Další informace o použití CConnectionPointnaleznete v článku Připojení ion Body.

Hierarchie dědičnosti

Objekt CObject

CCmdTarget

CConnectionPoint

Požadavky

Hlavička: afxdisp.h

C Připojení ionPoint::C Připojení ionPoint

CConnectionPoint Vytvoří objekt.

CConnectionPoint();

C Připojení ionPoint::Get Připojení ions

Voláním této funkce načtěte všechna aktivní připojení pro spojovací bod.

const CPtrArray* GetConnections();

Vrácená hodnota

Ukazatel na pole aktivních připojení (jímky). Některé ukazatele v poli můžou mít hodnotu NULL. Každý ukazatel bez hodnoty NULL v tomto poli lze bezpečně převést na ukazatel na rozhraní jímky pomocí operátoru přetypování.

C Připojení ionPoint::GetContainer

Volal rozhraní pro načtení spojovacího IConnectionPointContainer bodu.

virtual LPCONNECTIONPOINTCONTAINER GetContainer();

Vrácená hodnota

V případě úspěchu ukazatel na kontejner; jinak NULL.

Poznámky

Tuto funkci obvykle implementuje makro BEGIN_CONNECTION_PART.

C Připojení ionPoint::GetIID

Volal rozhraní pro načtení ID rozhraní spojovacího bodu.

virtual REFIID GetIID() = 0;

Vrácená hodnota

Odkaz na ID rozhraní spojovacího bodu.

Poznámky

Tuto funkci přepište tak, aby vrátila ID rozhraní pro tento spojovací bod.

C Připojení ionPoint::GetMax Připojení ions

Volal rozhraní pro načtení maximálního počtu připojení podporovaných spojovacím bodem.

virtual int GetMaxConnections();

Vrácená hodnota

Maximální počet připojení podporovaný ovládacím prvkům nebo -1, pokud žádný limit neexistuje.

Poznámky

Výchozí implementace vrátí hodnotu -1, což značí žádný limit.

Tuto funkci přepište, pokud chcete omezit počet jímek, které se můžou připojit k vašemu ovládacímu prvku.

C Připojení ionPoint::GetNext Připojení ion

Načte ukazatel na spojovací prvek v pos.

LPUNKNOWN GetNextConnection(POSITION& pos) const;

Parametry

Pos
Určuje odkaz na hodnotu POSITION vrácenou předchozím GetNextConnection voláním Nebo GetStartPosition .

Vrácená hodnota

Ukazatel na prvek připojení určený pos nebo NULL.

Poznámky

Tato funkce je nejužitečnější pro iteraci všemi prvky v mapě připojení. Při iterování přeskočte všechny hodnoty NUL vrácené z této funkce.

Příklad

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

C Připojení ionPoint::GetStartPosition

Spustí iteraci mapování vrácením hodnoty POSITION, kterou lze předat do volání GetNext Připojení ion.

POSITION GetStartPosition() const;

Vrácená hodnota

Hodnota POSITION, která označuje počáteční pozici pro iteraci mapy; nebo NULL, pokud je mapa prázdná.

Poznámky

Posloupnost iterací není předvídatelná; proto "první prvek v mapě" nemá žádný zvláštní význam.

Příklad

Podívejte se na příklad pro C Připojení ionPoint::GetNext Připojení ion.

C Připojení ionPoint::OnAdvise

Volané architekturou při vytváření nebo přerušení připojení.

virtual void OnAdvise(BOOL bAdvise);

Parametry

bAdvise
TRUE, pokud je navázáno připojení; jinak NEPRAVDA.

Poznámky

Výchozí implementace nic nedělá.

Tuto funkci přepište, pokud chcete oznámit, že se jímky připojují nebo odpojí od spojovacího bodu.

C Připojení ionPoint::QuerySinkInterface

Načte ukazatel na požadované rozhraní jímky.

virtual HRESULT QuerySinkInterface(
    LPUNKNOWN pUnkSink,
    void** ppInterface);

Parametry

pUnkSink
Identifikátor požadovaného rozhraní jímky.

ppInterface
Ukazatel na ukazatel rozhraní identifikovaný pomocí pUnkSink. Pokud objekt nepodporuje toto rozhraní, * ppInterface je nastaven na HODNOTU NULL.

Vrácená hodnota

Standardní hodnota HRESULT.

Viz také

CCmdTarget – třída
Graf hierarchie