Dela via


ActiveX-kontrollgränssnitt

Förutom andra mekanismer för kommunikation mellan kontrollen och dess klient anger ActiveX-styrtekniken IOleControl- och IOleControlSite--gränssnitt för kommunikation med klientkontroll. Det finns också gränssnittet ISimpleFrameSite för enkla kontrollcontainrar.

Dessa tre gränssnitt är dock specifika för kontroller och är i allmänhet inte användbara utanför kontrollkontexten. Dessa gränssnitt definieras på följande sätt.

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

Vissa kontroller, till exempel en gruppruta, är bara en enkel container med andra kontroller. I sådana fall behöver den enkla kontrollen, som kallas enkel ram, inte implementera alla containerkrav. Den kan delegera de flesta gränssnittsanrop från dess inneslutna kontroller till containern som hanterar den enkla ramen. Förutom gränssnittsanrop måste den enkla ramen också hantera Windows-meddelanden som potentiellt kommer från kontroller i den. Därför tillhandahåller en container ISimpleFrameSite- så att sådana enkla ramkontroller kan skicka meddelanden till containern. PreMessageFilter bearbetar meddelandet först. PostMessageFilter anropas när den enkla ramen har bearbetat själva meddelandet.

ActiveX-kontroller