Sdílet prostřednictvím


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 pUnkSrcná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 TRUEtento 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 TRUEtento 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

Viz také

Makra a globální objekty