Interfacce dei controlli ActiveX

Oltre ad altri meccanismi per la comunicazione tra il controllo e il client, la tecnologia dei controlli ActiveX specifica le interfacce IOleControl e IOleControlSite per la comunicazione con il controllo client. È disponibile anche l'interfaccia ISimpleFrameSite per contenitori di controlli semplici.

Queste tre interfacce sono tuttavia specifiche dei controlli e in genere non sono utili al di fuori del contesto dei controlli. Queste interfacce sono definite come segue.

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

Alcuni controlli, ad esempio una casella di gruppo, sono semplicemente un semplice contenitore di altri controlli. In questi casi, il controllo semplice, denominato frame semplice, non deve implementare tutti i requisiti del contenitore. Può delegare la maggior parte delle chiamate di interfaccia dai controlli contenuti al contenitore che gestisce il frame semplice. Oltre alle chiamate di interfaccia, il frame semplice deve anche gestire i messaggi di Windows che potenzialmente provengono dai controlli all'interno di esso. Per questo motivo, un contenitore fornisce ISimpleFrameSite per consentire a tali controlli frame semplici di passare messaggi al contenitore. PreMessageFilter elabora prima il messaggio; PostMessageFilter viene chiamato dopo che il frame semplice ha elaborato il messaggio stesso.

Controlli ActiveX