Rozhraní ovládacích prvků ActiveX
Kromě jiných mechanismů pro komunikaci mezi ovládacím prvku a jeho klientem určuje technologie ovládacích prvků ActiveX IOleControl a IOleControlSite rozhraní pro komunikaci řízení klienta. K dispozici je také rozhraní ISimpleFrameSite pro jednoduché kontejnery ovládacích prvků.
Tato tři rozhraní jsou však specifická pro ovládací prvky a nejsou obecně užitečná mimo kontext ovládacích prvků. Tato rozhraní jsou definována následujícím způsobem.
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);
}
Některé ovládací prvky, jako je skupinové pole, jsou pouze jednoduchým kontejnerem jiných ovládacích prvků. V takových případech nemusí jednoduchý ovládací prvek označovaný jako jednoduchý rámec implementovat všechny požadavky na kontejner. Většinu volání rozhraní může delegovat z jeho obsažených ovládacích prvků do kontejneru, který spravuje jednoduchý rámec. Kromě volání rozhraní musí jednoduchý rámec také řešit zprávy systému Windows, které mohou pocházet z ovládacích prvků v něm. Z tohoto důvodu kontejner poskytuje ISimpleFrameSite umožnit, aby tyto jednoduché ovládací prvky rámce předávaly zprávy do kontejneru. PreMessageFilter nejprve zpracuje zprávu; PostMessageFilter je volána po zpracování samotné zprávy jednoduchý rámec.
Související témata