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