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

Název Popis
CConnectionPoint::CConnectionPoint CConnectionPoint Vytvoří objekt.

Veřejné metody

Název Popis
CConnectionPoint::GetConnections Načte všechny spojovací body v mapě připojení.
CConnectionPoint::GetContainer Načte kontejner ovládacího prvku, který vlastní mapování připojení.
CConnectionPoint::GetIID Načte ID rozhraní spojovacího bodu.
CConnectionPoint::GetMaxConnections Načte maximální počet spojovacích bodů, které ovládací prvek podporuje.
CConnectionPoint::GetNextConnection Načte ukazatel na spojovací prvek v pos.
CConnectionPoint::GetStartPosition Spustí iteraci mapy vrácením hodnoty POSITION, kterou lze předat GetNextConnection volání.
CConnectionPoint::OnAdvise Volá se rozhraním při navazování nebo přerušení připojení.
CConnectionPoint::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 Spojovací body.

Hierarchie dědičnosti

Objekt CObject

CCmdTarget

CConnectionPoint

Požadavky

Hlavička: afxdisp.h

CConnectionPoint::CConnectionPoint

CConnectionPoint Vytvoří objekt.

CConnectionPoint();

CConnectionPoint::GetConnections

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

const CPtrArray* GetConnections();

Návratová 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í.

CConnectionPoint::GetContainer

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

virtual LPCONNECTIONPOINTCONTAINER GetContainer();

Návratová hodnota

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

Poznámky

Tuto funkci obvykle implementuje makro BEGIN_CONNECTION_PART.

CConnectionPoint::GetIID

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

virtual REFIID GetIID() = 0;

Návratová 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.

CConnectionPoint::GetMaxConnections

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

virtual int GetMaxConnections();

Návratová 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.

CConnectionPoint::GetNextConnection

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 .

Návratová 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();
      }
   }
}

CConnectionPoint::GetStartPosition

Spustí iteraci mapování vrácením hodnoty POSITION, kterou lze předat volání GetNextConnection .

POSITION GetStartPosition() const;

Návratová 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 CConnectionPoint::GetNextConnection.

CConnectionPoint::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.

CConnectionPoint::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.

Návratová hodnota

Standardní hodnota HRESULT.

Viz také

CCmdTarget – třída
Graf hierarchie