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í COleControl
implementuje -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í CConnectionPoint
naleznete v článku Spojovací body.
Hierarchie dědičnosti
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.