Mapy připojení
Ovládací prvky OLE umožňují zpřístupnit rozhraní jiným aplikacím. Tato rozhraní umožňují přístup pouze z kontejneru do tohoto ovládacího prvku. Pokud ovládací prvek OLE chce získat přístup k externím rozhraním jiných objektů OLE, musí být vytvořen spojovací bod. Tento spojovací bod umožňuje řídit odchozí přístup k externím mapě odesílání, jako jsou mapy událostí nebo funkce oznámení.
Knihovna tříd Microsoft Foundation nabízí programovací model, který podporuje spojovací body. V tomto modelu se "mapy připojení" používají k určení rozhraní nebo spojovacích bodů pro ovládací prvek OLE. Mapy připojení obsahují jedno makro pro každý spojovací bod. Další informace o mapách připojení najdete v CConnectionPoint
třídě.
Ovládací prvek obvykle podporuje pouze dva spojovací body: jeden pro události a jeden pro oznámení vlastností. Ty jsou implementovány COleControl
základní třídou a nevyžadují žádnou další práci zapisovače ovládacího prvku. Všechny další spojovací body, které chcete implementovat ve své třídě, musí být přidány ručně. Pro podporu mapování a bodů připojení poskytuje mfc následující makra:
Deklarace a vymezení mapy připojení
Název | Popis |
---|---|
BEGIN_CONNECTION_PART |
Deklaruje vloženou třídu, která implementuje další spojovací bod (musí se použít v deklaraci třídy). |
END_CONNECTION_PART |
Ukončí deklaraci spojovacího bodu (musí být použita v deklaraci třídy). |
CONNECTION_IID |
Určuje ID rozhraní spojovacího bodu ovládacího prvku. |
DECLARE_CONNECTION_MAP |
Deklaruje, že se ve třídě použije mapa připojení (musí se použít v deklaraci třídy). |
BEGIN_CONNECTION_MAP |
Začíná definice mapování připojení (musí být použita v implementaci třídy). |
END_CONNECTION_MAP |
Ukončí definici mapování připojení (musí se použít v implementaci třídy). |
CONNECTION_PART |
Určuje spojovací bod v mapě připojení ovládacího prvku. |
Následující funkce pomáhají jímce při navazování a odpojování připojení pomocí spojovacích bodů:
Inicializace/ukončení spojovacích bodů
Název | Popis |
---|---|
AfxConnectionAdvise |
Vytvoří spojení mezi zdrojem a jímkou. |
AfxConnectionUnadvise |
Přeruší spojení mezi zdrojem a jímkou. |
BEGIN_CONNECTION_PART
BEGIN_CONNECTION_PART
Pomocí makra zahajte definici dalších spojovacích bodů nad rámec spojovacích bodů události a vlastností.
BEGIN_CONNECTION_PART(theClass, localClass)
Parametry
theClass
Určuje název třídy ovládacího prvku, jejíž spojovací bod je tento.
localClass
Určuje název místní třídy, která implementuje spojovací bod.
Poznámky
V souboru deklarace (.h
), který definuje členské funkce pro vaši třídu, spusťte spojovací bod s BEGIN_CONNECTION_PART
makrem. Pak přidejte CONNECTION_IID
makro a všechny další členské funkce, které chcete implementovat. Nakonec dokončete mapování spojovacího END_CONNECTION_PART
bodu pomocí makra.
Požadavky
Záhlaví afxdisp.h
END_CONNECTION_PART
Ukončí deklaraci spojovacího bodu.
END_CONNECTION_PART(localClass)
Parametry
localClass
Určuje název místní třídy, která implementuje spojovací bod.
Požadavky
Záhlaví afxdisp.h
CONNECTION_IID
Mezi makry BEGIN_CONNECTION_PART
a END_CONNECTION_PART
makry slouží k definování ID rozhraní pro spojovací bod podporovaný ovládacím prvku OLE.
CONNECTION_IID(iid)
Parametry
iid
ID rozhraní volaného spojovacím bodem.
Poznámky
Argument iid
je ID rozhraní, které slouží k identifikaci rozhraní, které spojovací bod volá na připojené jímky. Příklad:
CONNECTION_IID(IID_ISampleSink)
Určuje spojovací bod, který volá ISinkInterface
rozhraní.
Požadavky
Záhlaví afxdisp.h
DECLARE_CONNECTION_MAP
Každá COleControl
-odvozená třída v programu může poskytnout mapu připojení k určení dalších spojovacích bodů, které váš ovládací prvek podporuje.
DECLARE_CONNECTION_MAP()
Poznámky
Pokud ovládací prvek podporuje další body, použijte DECLARE_CONNECTION_MAP
makro na konci deklarace třídy. Potom v souboru .cpp, který definuje členské funkce pro třídu, použijte BEGIN_CONNECTION_MAP
makro, CONNECTION_PART
makra pro každý z spojovacích bodů ovládacího prvku a END_CONNECTION_MAP
makro k deklaraci konce mapy připojení.
Požadavky
Záhlaví afxdisp.h
BEGIN_CONNECTION_MAP
Každá COleControl
-odvozená třída v programu může poskytnout mapu připojení k určení spojovacích bodů, které bude váš ovládací prvek podporovat.
BEGIN_CONNECTION_MAP(theClass, theBase)
Parametry
theClass
Určuje název třídy ovládacího prvku, jejíž mapování připojení je toto.
theBase
Určuje název základní třídy theClass
.
Poznámky
V souboru implementace (.CPP
), který definuje členské funkce pro vaši třídu, spusťte mapování připojení s BEGIN_CONNECTION_MAP
makrem a pak přidejte položky makra pro každý z spojovacích bodů pomocí CONNECTION_PART
makra. Nakonec dokončete mapu END_CONNECTION_MAP
připojení pomocí makra.
Požadavky
Záhlaví afxdisp.h
END_CONNECTION_MAP
Ukončí definici mapy připojení.
END_CONNECTION_MAP()
Požadavky
Záhlaví afxdisp.h
CONNECTION_PART
Mapuje spojovací bod pro ovládací prvek OLE na konkrétní ID rozhraní.
CONNECTION_PART(theClass, iid, localClass)
Parametry
theClass
Určuje název třídy ovládacího prvku, jejíž spojovací bod je tento.
iid
ID rozhraní volaného spojovacím bodem.
localClass
Určuje název místní třídy, která implementuje spojovací bod.
Poznámky
Příklad:
BEGIN_CONNECTION_MAP(CMyClass, CCmdTarget)
CONNECTION_PART(CMyClass, IID_ISampleSink, SampleConnPt)
END_CONNECTION_MAP()
implementuje mapu připojení s spojovacím bodem, který volá IID_ISinkInterface
rozhraní.
Požadavky
Záhlaví afxdisp.h
AfxConnectionAdvise
Voláním této funkce navážete spojení mezi zdrojem, určeným pUnkSrc
nástrojem , a jímkou určenou parametrem pUnkSink
.
BOOL AFXAPI AfxConnectionAdvise(
LPUNKNOWN pUnkSrc,
REFIID iid,
LPUNKNOWN pUnkSink,
BOOL bRefCount,
DWORD FAR* pdwCookie);
Parametry
pUnkSrc
Ukazatel na objekt, který volá rozhraní.
pUnkSink
Ukazatel na objekt, který implementuje rozhraní.
iid
ID rozhraní připojení.
bRefCount
U připojení mimo proces musí být TRUE
tento parametr a indikuje, že vytvoření připojení by mělo způsobit zvýšení referenčního pUnkSink
počtu.
U připojení v procesu označuje, TRUE
že vytvoření připojení by mělo způsobit zvýšení referenčního pUnkSink
počtu. FALSE
značí, že počet odkazů by neměl být přírůstkově navyšován.
Upozornění: Obecně nelze předpovědět, která připojení jsou v procesu a která připojení jsou mimo proces, takže doporučujeme vždy nastavit tento parametr na TRUE
.
pdwCookie
Ukazatel na DWORD
místo, kde je vrácen identifikátor připojení. Tato hodnota by se měla předat jako dwCookie
parametr AfxConnectionUnadvise
při odpojení připojení.
Návratová hodnota
Nenulové, pokud bylo připojení vytvořeno; jinak 0.
Příklad
//CMySink is a CCmdTarget-derived class supporting automation.
//Instantiate the sink class.
CMySink mysink;
//Get a pointer to sink's IUnknown, no AddRef done.
IID iid = IID_IUnknown;
IUnknown* pUnkSink = mysink.GetInterface(&iid);
//Establish a connection between source and sink.
//pUnkSrc is IUnknown of server obtained by CoCreateInstance().
//dwCookie is a cookie identifying the connection, and is needed
//to terminate this connection.
AfxConnectionAdvise(pUnkSrc, IID_ISampleSink, pUnkSink, FALSE, &dwCookie);
Požadavky
Záhlaví: afxctl.h
AfxConnectionUnadvise
Voláním této funkce se odpojí spojení mezi zdrojem, určeným parametrem pUnkSrc
, a jímkou určenou .pUnkSink
BOOL AFXAPI AfxConnectionUnadvise(
LPUNKNOWN pUnkSrc,
REFIID iid,
LPUNKNOWN pUnkSink,
BOOL bRefCount,
DWORD dwCookie);
Parametry
pUnkSrc
Ukazatel na objekt, který volá rozhraní.
pUnkSink
Ukazatel na objekt, který implementuje rozhraní.
iid
ID rozhraní spojovacího bodu.
bRefCount
U připojení mimo proces musí být TRUE
tento parametr a indikuje, že vytvoření připojení by mělo způsobit snížení počtu pUnkSink
odkazů.
U připojení v procesu označuje, TRUE
že vytvoření připojení by mělo způsobit snížení počtu pUnkSink
odkazů. FALSE
značí, že počet odkazů by neměl být dekrementován.
Upozornění: Obecně nelze předpovědět, která připojení jsou v procesu a která připojení jsou mimo proces, takže doporučujeme vždy nastavit tento parametr na TRUE
.
dwCookie
Identifikátor připojení vrácený .AfxConnectionAdvise
Vrácená hodnota
Nenulové, pokud bylo připojení odpojeno; jinak 0.
Příklad
//mysink is a CCmdTarget-derived class supporting automation.
//Get a pointer to sink's IUnknown, no AddRef done.
IID iid = IID_IUnknown;
IUnknown* pUnkSink = mysink.GetInterface(&iid);
//Terminate a connection between source and sink.
//pUnkSrc is IUnknown of server obtained by CoCreateInstance().
//dwCookie is a value obtained through AfxConnectionAdvise().
AfxConnectionUnadvise(pUnkSrc, IID_ISampleSink, pUnkSink, FALSE, dwCookie);
Požadavky
Záhlaví: afxctl.h