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í 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 Připojení ion Body.
Hierarchie dědičnosti
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é
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro