Поделиться через


Интерфейсы элементов управления ActiveX

Помимо других механизмов взаимодействия между элементом управления и его клиентом, технология activeX определяет интерфейсы IOleControl и IOleControlSite для взаимодействия с клиентом. Существует также интерфейс 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