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 COleControl
klasa 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 COleControl
klasa 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 pUnkSrc
element 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ć TRUE
wartość 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 TRUE
wartość .
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ć TRUE
wartość 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 TRUE
wartość .
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