使用容器的功能

前面的部分介绍了 ActiveX 控件访问其容器的某些功能所必需的调用方支持。 下表描述了控件对容器端接口的使用以及何时出现此类用法。

接口 容器对象 使用情况
IOleClientSite
场所
实现 IOleObject 的控件调用 IOleClientSite 方法作为标准 OLE 嵌入协议的一部分,特别是方法 SaveObjectShowObjectOnShowWindow(仅当支持单独的窗口激活状态)、RequestNewObjectLayout 和 GetContainer(如果需要与其他控件通信时)。 GetMoniker 方法仅在控件可以从外部链接时使用,即控件未标记为 OLEMISC_CANTLINKINSIDE。
IOleInPlaceSite
场所
具有就地激活且可能 UI 处于活动状态的控件将调用 IOleInPlaceSite 方法(一般都是 ContextSensitiveHelp 除外)作为标准 OLE 就地激活协议的一部分。
IAdviseSink
场所
如果控件支持 IDataObject,则控件调用 OnDataChange;如果控件支持 IViewObject2,则调用 OnViewChange;如果控制件支持 IOleObject,则调用 OnCloseOnSaveOnRename
IOleControlSite
场所
如果受支持,当助记符发生更改时,控件调用 OnControlInfoChanged;如果触发事件,则调用 LockInPlaceActiveTransformCoords(仅当坐标作为事件参数传递时使用后一种方法);如果控件具有 UI 活动状态,调用 OnFocus and TranslateAccelerator;如果控件想要查看扩展控件(容器拥有)属性,则调用 GetExtendedControl
IDispatch(环境属性)
场所
用于访问环境属性。
IPropertyNotifySink
多种多样
控件必须为分别标记为 [bindable] 和 [request] 的任何控件属性生成 OnChangedOnRequestEdit
其他事件接收器接口
多种多样
具有除 IPropertyNotifySink 以外的传出接口的控件将被传递到控件的 IConnectionPoint::Advise 实现(通常在控件的子对象中找到)的正确 IID 的其他接口指针。 控件总是知道如何调用自己的事件接口,因为控件定义了这些接口。
IOleInPlaceFrame
Frame
当控件具有需要框架级工具或菜单项的原位 UI 活动状态时使用。
IOleInPlaceUIWindow
文档
仅当控件具有需要文档级或窗格级 UI 工具的原位 UI 活动状态时使用。 这种情况很罕见。

Controls