Compartilhar via


Interfaces de controles ActiveX

Além de outros mecanismos de comunicação entre o controle e seu cliente, a tecnologia de controles ActiveX especifica as interfaces IOleControl e IOleControlSite para comunicação de controle de cliente. Há também a interface ISimpleFrameSite para contêineres de controle simples.

Essas três interfaces são, no entanto, específicas para controles e geralmente não são úteis fora do contexto de controles. Essas interfaces são definidas a seguir.

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

Alguns controles, como uma caixa de grupo, são apenas um contêiner simples de outros controles. Nesses casos, o controle simples, chamado de quadro simples, não precisa implementar todos os requisitos do contêiner. Ele pode delegar a maioria das chamadas de interface de seus controles contidos para o contêiner que gerencia o quadro simples. Além das chamadas de interface, o quadro simples também tem que lidar com mensagens do Windows que potencialmente vêm de controles dentro dele. Por esse motivo, um contêiner fornece ISimpleFrameSite para permitir que esses controles de quadro simples passem mensagens para o contêiner. PreMessageFilter processa a mensagem primeiro; PostMessageFilter é chamado depois que o quadro simples processou a própria mensagem.

Controles ActiveX