视觉表现

控件通过复合文档技术和 OLE 拖放技术(涉及控件及其容器)支持在其容器中定位和显示自身。 当容器管理控件的位置及其大小时,控件必须能够自行绘制。

控件添加到 OLE 文档提供的基本函数。 控件调用其客户端的 IOleClientSite::RequestNewObjectLayout 方法,告知其容器要更改其大小。 客户端调用控件的 IOleObject::GetExtent 以获取新大小,并调用 IOleInPlaceObject::SetObjectRects 将控件设置为其新大小。

仅支持 IPersistStreamIPersistStreamInit 的控件不支持通过 IOleCache2 进行缓存,因为缓存需要对 IPersistStorage 的支持。 但是,这些控件应为客户端提供一种通过 IDataObject::GetData 呈现控件的方法,以便客户端可以选择为控件创建和管理自己的演示数据缓存。

控件使用 HIMETRIC 类型作为其坐标。 但是,不同的容器可以使用不同的坐标系。 容器希望在其自己的系统中接收坐标,但控件不一定知道其容器正在使用什么坐标。 为了成功地进行通信,控件需要一种将值转换为其容器坐标的方法。 容器通过 IOleControlSite::TransformCoords 方法提供了一个站点对象。 控件首先在其容器的客户端调用此方法,将其坐标转换为容器的适当坐标。 然后,将转换后的坐标传递给容器。

控件可以在容器的站点对象中调用 IOleControlSite::LockInPlaceActive,以防止容器试图将控件降级出原位活动状态。 以这种方式降级控件会导致控件被停用,其窗口被破坏;因此,如果控件必须在已知的持续时间内保持其窗口,则可以调用 LockInPlaceActive 来保证其状态。

ActiveX 控件