Udostępnij za pośrednictwem


Mapy połączeń

Kontrolki OLE mogą uwidaczniać interfejsy innym aplikacjom. Te interfejsy zezwalają tylko na dostęp z kontenera do tej kontrolki. Jeśli kontrolka OLE chce uzyskać dostęp do interfejsów zewnętrznych innych obiektów OLE, należy ustanowić punkt połączenia. Ten punkt połączenia umożliwia kontrolowanie wychodzącego dostępu do zewnętrznych map wysyłania, takich jak mapy zdarzeń lub funkcje powiadomień.

Biblioteka klas programu Microsoft Foundation oferuje model programowania, który obsługuje punkty połączenia. W tym modelu "mapy połączeń" służą do wyznaczania interfejsów lub punktów połączenia dla kontrolki OLE. Mapy połączeń zawierają jedno makro dla każdego punktu połączenia. Aby uzyskać więcej informacji na temat map połączeń, zobacz klasę CConnectionPoint .

Zazwyczaj kontrolka obsługuje tylko dwa punkty połączenia: jeden dla zdarzeń i jeden dla powiadomień o właściwościach. Są one implementowane przez klasę COleControl bazową i nie wymagają dodatkowej pracy przez moduł zapisywania kontrolek. Wszelkie inne punkty połączenia, które chcesz zaimplementować w klasie, należy dodać ręcznie. Aby obsługiwać mapy połączeń i punkty, MFC udostępnia następujące makra:

Deklaracja mapy połączenia i demarcation

Nazwa/nazwisko opis
BEGIN_CONNECTION_PART Deklaruje klasę osadzoną, która implementuje dodatkowy punkt połączenia (musi być używany w deklaracji klasy).
END_CONNECTION_PART Kończy deklarację punktu połączenia (należy użyć w deklaracji klasy).
CONNECTION_IID Określa identyfikator interfejsu punktu połączenia kontrolki.
DECLARE_CONNECTION_MAP Deklaruje, że mapa połączenia będzie używana w klasie (musi być używana w deklaracji klasy).
BEGIN_CONNECTION_MAP Rozpoczyna definicję mapy połączenia (musi być używana w implementacji klasy).
END_CONNECTION_MAP Kończy definicję mapy połączenia (musi być używana w implementacji klasy).
CONNECTION_PART Określa punkt połączenia na mapie połączenia kontrolki.

Następujące funkcje pomagają ujściu w ustanawianiu i rozłączeniu połączenia przy użyciu punktów połączenia:

Inicjowanie/kończenie punktów połączenia

Nazwa/nazwisko opis
AfxConnectionAdvise Ustanawia połączenie między źródłem a ujściem.
AfxConnectionUnadvise Przerywa połączenie między źródłem a ujściem.

BEGIN_CONNECTION_PART

Użyj makra BEGIN_CONNECTION_PART , aby rozpocząć definicję dodatkowych punktów połączenia poza punktami połączenia zdarzenia i właściwości powiadomień.

BEGIN_CONNECTION_PART(theClass, localClass)

Parametry

theClass Określa nazwę klasy kontrolnej, której punktem połączenia jest.

localClass Określa nazwę klasy lokalnej, która implementuje punkt połączenia.

Uwagi

W pliku deklaracji (.h), który definiuje funkcje składowe dla klasy, uruchom punkt połączenia za pomocą makra BEGIN_CONNECTION_PART . Następnie dodaj CONNECTION_IID makro i inne funkcje członkowskie, które chcesz zaimplementować. Na koniec ukończ mapę punktów połączenia za pomocą makra END_CONNECTION_PART .

Wymagania

Nagłówek afxdisp.h

END_CONNECTION_PART

Kończy deklarację punktu połączenia.

END_CONNECTION_PART(localClass)

Parametry

localClass
Określa nazwę klasy lokalnej, która implementuje punkt połączenia.

Wymagania

Nagłówek afxdisp.h

CONNECTION_IID

Użyj między BEGIN_CONNECTION_PART makrami i END_CONNECTION_PART , aby zdefiniować identyfikator interfejsu dla punktu połączenia obsługiwanego przez kontrolkę OLE.

CONNECTION_IID(iid)

Parametry

iid
Identyfikator interfejsu wywoływany przez punkt połączenia.

Uwagi

Argument iid jest identyfikatorem interfejsu używanym do identyfikowania interfejsu, który punkt połączenia wywołuje na połączonych ujściach. Na przykład:

CONNECTION_IID(IID_ISampleSink)

Określa punkt połączenia, który wywołuje ISinkInterface interfejs.

Wymagania

Nagłówek afxdisp.h

DECLARE_CONNECTION_MAP

Każda COleControlklasa pochodna w programie może udostępnić mapę połączenia, aby określić dodatkowe punkty połączenia obsługiwane przez kontrolkę.

DECLARE_CONNECTION_MAP()

Uwagi

Jeśli kontrolka obsługuje dodatkowe punkty, użyj makra DECLARE_CONNECTION_MAP na końcu deklaracji klasy. Następnie w pliku .cpp, który definiuje funkcje składowe dla klasy, użyj BEGIN_CONNECTION_MAP makra, CONNECTION_PART makr dla każdego z punktów połączenia kontrolki i END_CONNECTION_MAP makra, aby zadeklarować koniec mapy połączenia.

Wymagania

Nagłówek afxdisp.h

BEGIN_CONNECTION_MAP

Każda COleControlklasa pochodna w programie może dostarczyć mapę połączenia, aby określić punkty połączenia obsługiwane przez kontrolkę.

BEGIN_CONNECTION_MAP(theClass, theBase)

Parametry

theClass
Określa nazwę klasy sterującej, której mapa połączeń jest taka.

theBase
Określa nazwę klasy bazowej klasy theClass.

Uwagi

W pliku implementacji (.CPP), który definiuje funkcje składowe dla klasy, uruchom mapę BEGIN_CONNECTION_MAP połączenia za pomocą makra, a następnie dodaj wpisy makra dla każdego z punktów połączenia przy użyciu makra CONNECTION_PART . Na koniec ukończ mapę połączenia za pomocą makra END_CONNECTION_MAP .

Wymagania

Nagłówek afxdisp.h

END_CONNECTION_MAP

Kończy definicję mapy połączenia.

END_CONNECTION_MAP()

Wymagania

Nagłówek afxdisp.h

CONNECTION_PART

Mapuje punkt połączenia dla kontrolki OLE na określony identyfikator interfejsu.

CONNECTION_PART(theClass, iid, localClass)

Parametry

theClass
Określa nazwę klasy kontrolnej, której punktem połączenia jest.

iid
Identyfikator interfejsu wywoływany przez punkt połączenia.

localClass
Określa nazwę klasy lokalnej, która implementuje punkt połączenia.

Uwagi

Na przykład:

BEGIN_CONNECTION_MAP(CMyClass, CCmdTarget)
    CONNECTION_PART(CMyClass, IID_ISampleSink, SampleConnPt)
END_CONNECTION_MAP()

implementuje mapę połączenia z punktem połączenia, który wywołuje IID_ISinkInterface interfejs.

Wymagania

Nagłówek afxdisp.h

AfxConnectionAdvise

Wywołaj tę funkcję, aby ustanowić połączenie między źródłem określonym przez pUnkSrcelement i ujściem określonym przez pUnkSink.

BOOL AFXAPI AfxConnectionAdvise(
    LPUNKNOWN pUnkSrc,
    REFIID iid,
    LPUNKNOWN pUnkSink,
    BOOL bRefCount,
    DWORD FAR* pdwCookie);

Parametry

pUnkSrc
Wskaźnik do obiektu, który wywołuje interfejs.

pUnkSink
Wskaźnik do obiektu, który implementuje interfejs.

iid
Identyfikator interfejsu połączenia.

bRefCount
W przypadku połączeń poza procesem ten parametr musi mieć TRUEwartość i wskazuje, że utworzenie połączenia powinno spowodować przyrost liczby pUnkSink odwołań.

W przypadku połączeń procesowych wskazuje, TRUE że utworzenie połączenia powinno spowodować przyrostową liczbę pUnkSink odwołań. FALSE wskazuje, że liczba odwołań nie powinna być zwiększana.

Ostrzeżenie: Ogólnie nie można przewidzieć, które połączenia są w trakcie przetwarzania i które połączenia są poza procesem, dlatego zaleca się zawsze ustawienie tego parametru na TRUEwartość .

pdwCookie
Wskaźnik do DWORD miejsca, w którym jest zwracany identyfikator połączenia. Ta wartość powinna zostać przekazana dwCookie jako parametr do AfxConnectionUnadvise podczas odłączania połączenia.

Wartość zwracana

Nonzero, jeśli połączenie zostało nawiązane; w przeciwnym razie 0.

Przykład

//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);

Wymagania

Nagłówek: afxctl.h

AfxConnectionUnadvise

Wywołaj tę funkcję, aby rozłączyć połączenie między źródłem określonym przez pUnkSrc, i ujściem określonym przez pUnkSink.

BOOL AFXAPI AfxConnectionUnadvise(
    LPUNKNOWN pUnkSrc,
    REFIID iid,
    LPUNKNOWN pUnkSink,
    BOOL bRefCount,
    DWORD dwCookie);

Parametry

pUnkSrc
Wskaźnik do obiektu, który wywołuje interfejs.

pUnkSink
Wskaźnik do obiektu, który implementuje interfejs.

iid
Identyfikator interfejsu punktu połączenia.

bRefCount
W przypadku połączeń poza procesem ten parametr musi mieć TRUEwartość i wskazuje, że utworzenie połączenia powinno spowodować dekrementację liczby pUnkSink odwołań.

W przypadku połączeń procesowych wskazuje, TRUE że utworzenie połączenia powinno spowodować dekrementację liczby pUnkSink odwołań. FALSE wskazuje, że nie należy dekrementować liczby odwołań.

Ostrzeżenie: Ogólnie nie można przewidzieć, które połączenia są w trakcie przetwarzania i które połączenia są poza procesem, dlatego zaleca się zawsze ustawienie tego parametru na TRUEwartość .

dwCookie
Identyfikator połączenia zwrócony przez AfxConnectionAdvise.

Wartość zwracana

Niezerowe, jeśli połączenie zostało rozłączone; w przeciwnym razie 0.

Przykład

//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);

Wymagania

Nagłówek: afxctl.h

Zobacz też

Makra i globalne