Udostępnij przez


Co oznacza wsparcie dla interfejsu

Oprócz interfejsu IUnknown, kontrolka ActiveX lub obiekt COM w tym przypadku wyraża dowolną opcjonalną funkcjonalność obsługiwaną przez dodatkowe interfejsy. Oznacza to, że żadne inne interfejsy nie są wymagane powyżej IUnknown. W tej tabeli wymieniono interfejsy, które może obsługiwać kontrolka ActiveX i co oznacza obsługę tego interfejsu.

Interfejs Komentarze/Znaczenie wspierania interfejsu
IOleObject
Jeśli kontrolka wymaga komunikacji z lokacją klienta dla niczego innego niż zdarzenia (zobacz IConnectionPointContainer), IOleObject jest koniecznością. Podczas implementowania tego interfejsu, kontrolka musi również obsługiwać semantykę następujących metod: SetHostNames, Close, EnumVerbs, Update, IsUpToDate, GetUserClassID, GetUserType, GetMiscStatus, oraz metody Advise, Unadvise, i EnumAdvise, które działają w połączeniu z implementacją IAdviseSink kontenera. Kontrolka implementowana IOleObject musi być w stanie obsługiwać IAdviseSink, jeśli kontener go udostępnia; kontener może tego nie robić, w takim przypadku kontrolka musi zapewnić, że nie podejmie próby wywołania nieistniejącego ujścia.
IOleInPlaceObject
Wyraża zdolność kontrolki do aktywacji na miejscu oraz możliwości aktywacji interfejsu użytkownika. Ten interfejs oznacza, że kontrolka ma interfejs użytkownika pewnego rodzaju, który można aktywować, a IOleInPlaceActiveObject jest również obsługiwany. Wymagane metody to GetWindow, InPlaceDeactivate, UIDeactivate, SetObjectRectsi ReactivateAndUndo. Obsługa tego interfejsu wymaga obsługi IOleObject.
IOleInPlaceActiveObject
Obiekt, który może działać w trybie in-place i obsługuje IOleInPlaceObject, musi również zapewnić ten interfejs, chociaż kontrolka nie musi tego interfejsu implementować bezpośrednio.
IOleControl
Wyraża zdolność i chęć kontrolki do radzenia sobie z (a) mnemonics (metodyGetControlInfo, OnMnemonic), (b) właściwościami środowiskowymi (OnAmbientPropertyChange) oraz/lub (c) zdarzeniami, które wymagają od kontrolki obsługi przez kontener (FreezeEvents). Należy pamiętać, że mnemoniki różnią się od akceleratorów obsługiwanych za pośrednictwem IOleInPlaceActiveObject: mnemoniki mają skojarzony interfejs użytkownika i są aktywne nawet wtedy, gdy kontrolka nie jest aktywna w interfejsie użytkownika. Obsługa mnemonics kontrolki oznacza, że kontrolka wie również, jak używać kontenera IOleControlSite::OnControlInfoChanged metody. Ponieważ wymaga to kontrolowania znajomości lokalizacji kontenera, obsługa mnemonics oznacza również obsługę IOleObject. Ponadto znajomość technik mnemotechnicznych wymaga obsługi w trybie bezpośrednim, a tym samym IOleInPlaceObject.
Jeśli kontrolka korzysta z dowolnych właściwości otoczenia kontenera, musi również zaimplementować ten interfejs w celu odbierania powiadomień o zmianie, ponieważ jest wymagana semantyka zmian. Ponieważ właściwości otoczenia są dostępne tylko za pośrednictwem lokalizacji kontenera IDispatch, obsługa właściwości otoczenia oznacza, że kontrolka obsługuje IOleObject (w celu uzyskania dostępu do lokalizacji), a także możliwość generowania wywołań IDispatch::Invoke.
Metoda FreezeEvents jest niezbędna dla kontrolek, które muszą wiedzieć, kiedy kontener nie będzie obsługiwał zdarzenia; jest to jedyny sposób, w jaki kontrolki mogą rozpoznać tę sytuację. Jeśli FreezeEvents jest konieczne tylko w izolacji, tak że inne metody IOleControl nie są zaimplementowane, IOleControl może funkcjonować samodzielnie bez IOleObject lub IOleInPlaceObject.
IDataObject
Wskazuje, że kontrolka może co najmniej dostarczać (a) graficzne renderowanie kontrolki (CF_METAFILEPICT jest minimum, jeśli kontrolka ma jakiekolwiek wizualizacje) i/lub (b) zestawy właściwości, jeśli kontrolka ma do zaoferowania jakiekolwiek właściwości. Wymagane są metody GetData, QueryGetData, EnumFormatEtc, DAdvise, DUnadvisei EnumDAdvise. Obsługa formatów graficznych innych niż CF_METAFILEPICT jest opcjonalna.
IViewObject2
Wskazuje, że element sterujący ma ciekawe wizualizacje, gdy nie jest aktywny w miejscu. W przypadku zaimplementowania kontrolka musi obsługiwać metody Draw, GetAdvise, SetAdvisei GetExtent.
IDispatch
Wskazuje, że kontrolka ma niestandardowe metody i/lub właściwości niestandardowe, które są dostępne za pośrednictwem późnego wiązania za pomocą IDispatch::Invoke. Wymaga to również, aby kontrolka dostarczała informacje o typie za pośrednictwem innych metod IDispatch. Kontrolka może obsługiwać wiele implementacji IDispatch, w których tylko jedna z nich jest skojarzona z IID_IDispatch, inne muszą mieć własne unikatowe identyfikatory „dispinterface”.
Zaleca się podanie podwójnych interfejsów dla niektórych metod oraz dostępu do właściwości, ale jest to opcjonalne, jeśli istnieją metody i właściwości.
IConnectionPointContainer
Wskazuje, że kontrolka obsługuje co najmniej jeden interfejs wychodzący, taki jak zdarzenia lub powiadomienia o zmianie właściwości. Wszystkie metody tego interfejsu należy zaimplementować, jeśli ten interfejs jest w ogóle dostępny, w tym EnumConnectionPoints, który wymaga oddzielnego obiektu z IEnumConnectionPoints.
Obsługa IConnectionPointContainer oznacza, że obiekt wspiera również co najmniej jeden powiązany obiekt z IConnectionPoint, dostępny poprzez metody IConnectionPointContainer. Każdy obiekt punktu połączenia musi implementować pełny interfejs IConnectionPoint, w tym EnumConnections, co wymaga użycia innego obiektu wyliczającego, który ma interfejs IEnumConnections.
IProvideClassInfo
IProvideClassInfo2
Wskazuje, że obiekt może podać własne informacje o typie coklasy bezpośrednio za pośrednictwem IProvideClassInfo::GetClassInfo. Jeśli kontrolka obsługuje późniejszą odmianę IProvideClassInfo2, oznacza to również jej zdolność do zapewnienia swojego podstawowego identyfikatora IID źródła za pośrednictwem IProvideClassInfo2::GetGUID. Należy zaimplementować wszystkie metody tego interfejsu.
ISpecifyPropertyPages
Wskazuje, że kontrolka ma strony właściwości, które może wyświetlać, aby kontener mógł koordynować strony właściwości tej kontrolki ze stronami innych kontrolek, gdy strony właściwości mają być wyświetlane dla wyboru z wieloma kontrolkami. Wszystkie metody tego interfejsu muszą być implementowane, jeśli obsługa jest dostępna.
IPerPropertyBrowsing
Wskazuje zdolność kontrolki do (a) podania ciągu wyświetlanego dla właściwości, (b) podania wstępnie zdefiniowanych ciągów i wartości dla jej właściwości i/lub (c) mapowania właściwości dispID na określoną stronę właściwości. Obsługa tego interfejsu oznacza, że zapewniona jest obsługa właściwości za pośrednictwem interfejsu IDispatch, tak jak powyżej. Jeśli (c) jest obsługiwany, oznacza to również, że strony właściwości obiektu zamapowane za pomocą IPerPropertyBrowsing::MapPropertyToPage same implementują IPropertyPage2, a nie podstawowy interfejs IPropertyPage.
IPersistStream
IPersistStreamInit
IPersistMemory
IPersistStorage
IPersistMoniker
IPersistPropertyBag
Zobacz interfejsy trwałości .
IOleCache
IOleCache2
Wskazuje obsługę buforowania wizualizacji kontrolek w kontenerach. Kontrolka zazwyczaj uzyskuje obsługę buforowania bezpośrednio za pośrednictwem funkcji OLE CreateDataCache. Tylko kontrolki z sensowną zawartością statyczną powinny decydować się na to (chociaż nie jest to wymagane). Jeśli kontrolka w ogóle obsługuje buforowanie, powinna po prostu agregować pamięć podręczną danych i uwidaczniać interfejsy zarówno IOleCache , jak i IOleCache2 , pochodzące z pamięci podręcznej danych. Kontrolka implementowana IOleObject musi mieć możliwość obsługi IAdviseSink, jeśli kontener go udostępnia; jeśli kontener go nie udostępnia, kontrolka oczywiście zapewnia, że nie próbuje wywołać nieistniejącego ujścia.
Zewnętrzne Połączenie
Wskazuje, że kontrolka obsługuje zewnętrzne linki do siebie; oznacza to, że kontrolka nie jest oznaczona jako OLEMISC_CANTLINKINSIDE i obsługuje IOleObject::SetMoniker oraz IOleObject::GetMoniker. Kontener nigdy nie będzie wykonywać zapytań dotyczących tego interfejsu ani wywoływać go bezpośrednio, ponieważ wywołania są generowane z poziomu warstwy zdalnej komunikacji OLE.
IRunnableObject
Wskazuje, że kontrolka odróżnia stan ładowania od uruchomienia, jak to robią niektóre obiekty wewnątrzprocesowe.

Kontrolki