Udostępnij za pośrednictwem


Interfejsy kontrolek ActiveX

Oprócz innych mechanizmów komunikacji między kontrolką i jego klientem technologia kontrolek ActiveX określa IOleControl i interfejsy IOleControlSite dla komunikacji z klientem. Istnieje również interfejs ISimpleFrameSite dla prostych kontenerów sterowania.

Te trzy interfejsy są jednak specyficzne dla kontrolek i nie są ogólnie przydatne poza kontekstem kontrolek. Te interfejsy są definiowane w następujący sposób.

interface IOleControl : IUnknown 
  { 
    HRESULT GetControlInfo([out] CONTROLINFO *pCI); 
    HRESULT OnMnemonic([in] LPMSG pMsg); 
    HRESULT OnAmbientPropertyChange([in] DISPID dispID); 
    HRESULT FreezeEvents([in] BOOL bFreeze); 
  } 
 
interface IOleControlSite : IUnknown 
  { 
    HRESULT OnControlInfoChanged(void); 
    HRESULT LockInPlaceActive([in] BOOL fLock); 
    HRESULT GetExtendedControl([out] IDispatch **ppDisp); 
    HRESULT TransformCoords([in-out] POINTL *pptlHimetric, [in-out] POINTF *pptfContainer, [in] DWORD dwFlags); 
    HRESULT TranslateAccelerator([in] LPMSG pMsg, [in] DWORD grfModifiers); 
    HRESULT OnFocus([in] BOOL fGotFocus); 
    HRESULT ShowPropertyFrame(void); 
  } 
 
interface ISimpleFrameSite : IUnknown 
  { 
    HRESULT PreMessageFilter([in] HWND hWnd, [in] UINT msg, [in] WPARAM wp, [in] LPARAM lp, 
        [out] LRESULT *plResult, [out] DWORD *pdwCookie); 
    HRESULT PostMessageFilter([in] HWND hWnd, [in] UINT msg, [in] WPARAM wp, [in] LPARAM lp, 
        [out] LRESULT *plResult, [in] DWORD dwCookie); 
  } 
 

Niektóre kontrolki, takie jak pole grupy, są tylko prostym kontenerem innych kontrolek. W takich przypadkach prosta kontrolka nazywana prostą ramką nie musi implementować wszystkich wymagań kontenera. Może delegować większość wywołań interfejsu z zawartych kontrolek do kontenera, który zarządza prostą ramką. Oprócz wywołań interfejsu prosta ramka musi również obsługiwać komunikaty systemu Windows, które potencjalnie pochodzą z kontrolek w nim. Z tego powodu kontener dostarcza ISimpleFrameSite, aby umożliwić takim prostym kontrolkom ramek przekazywanie komunikatów do kontenera. PreMessageFilter najpierw przetwarza komunikat; PostMessageFilter jest wywoływana po przetworzeniu samego komunikatu przez prostą ramkę.

kontrolek ActiveX