ActiveX 控件接口

除了控件与其客户端之间的其他通信机制外,ActiveX 控件技术还指定了用于客户端与控件通信的 IOleControlIOleControlSite 接口。 此外,还有用于简单控制容器的 ISimpleFrameSite 接口。

但是,这三个接口是控件专用的,在控件之外通常都不会用到。 这些接口定义如下。

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

某些控件(如组框)只是其他控件的简单容器。 在这种情况下,被称为简单框架的简单控件不必实现所有容器要求。 它可以将所含控件的大部分接口调用委托给负责管理简单框架的容器。 除了接口调用外,简单框架还必须处理可能来自其中控件的 Windows 消息。 因此,容器会提供 ISimpleFrameSite,以便允许此类简单框架控件向容器传递信息。 PreMessageFilter 会首先处理报文;PostMessageFilter 会在简单框架处理完报文后被调用。

ActiveX 控件