Interfaces de controles ActiveX

Además de otros mecanismos para comunicarse entre el control y su cliente, la tecnología de controles ActiveX especifica las interfaces IOleControl e IOleControlSite para la comunicación de control de cliente. También hay la interfaz ISimpleFrameSite para contenedores de control simples.

Sin embargo, estas tres interfaces son específicas de los controles y no suelen ser útiles fuera del contexto de los controles. Estas interfaces se definen de la siguiente manera.

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

Algunos controles, como un cuadro de grupo, son simplemente un contenedor simple de otros controles. En tales casos, el control simple, denominado marco simple, no tiene que implementar todos los requisitos de contenedor. Puede delegar la mayoría de las llamadas de interfaz de sus controles contenidos al contenedor que administra el marco simple. Además de las llamadas de interfaz, el marco simple también tiene que tratar con los mensajes de Windows que pueden provenir de controles dentro de él. Por este motivo, un contenedor proporciona ISimpleFrameSite para permitir que estos controles de marco simples pasen mensajes al contenedor. PreMessageFilter procesa primero el mensaje; Se llama a PostMessageFilter después de que el marco simple haya procesado el propio mensaje.

Controles ActiveX