Antarmuka Kontrol ActiveX

Selain mekanisme lain untuk berkomunikasi antara kontrol dan kliennya, teknologi kontrol ActiveX menentukan antarmuka IOleControl dan IOleControlSite untuk komunikasi kontrol klien. Ada juga antarmuka ISimpleFrameSite untuk kontainer kontrol sederhana.

Ketiga antarmuka ini, bagaimanapun, khusus untuk kontrol dan umumnya tidak berguna di luar konteks kontrol. Antarmuka ini didefinisikan sebagai berikut.

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

Beberapa kontrol, seperti kotak grup, hanyalah kontainer sederhana dari kontrol lain. Dalam kasus seperti itu, kontrol sederhana, yang disebut bingkai sederhana, tidak harus menerapkan semua persyaratan kontainer. Ini dapat mendelegasikan sebagian besar panggilan antarmuka dari kontrol yang terkandung ke kontainer yang mengelola bingkai sederhana. Selain panggilan antarmuka, bingkai sederhana juga harus berurusan dengan pesan Windows yang berpotensi berasal dari kontrol di dalamnya. Untuk alasan ini, kontainer memasok ISimpleFrameSite untuk memungkinkan kontrol bingkai sederhana tersebut meneruskan pesan ke kontainer. PreMessageFilter memproses pesan terlebih dahulu; PostMessageFilter dipanggil setelah bingkai sederhana memproses pesan itu sendiri.

Kontrol ActiveX