视觉表示形式
控件通过复合文档技术和涉及控件及其容器的 OLE 拖放技术支持定位和显示自身。 当容器管理控件的位置及其大小时,控件必须能够自行绘制。
控件添加到 OLE 文档提供的基本函数。 控件调用其客户端的 IOleClientSite::RequestNewObjectLayout 方法,以告知其容器要更改其大小。 客户端调用控件的 IOleObject::GetExtent 以获取新大小,并调用 IOleInPlaceObject::SetObjectRects 将控件设置为其新大小。
仅支持 IPersistStream 或 IPersistStreamInit 的控件不支持通过 IOleCache2 进行缓存,因为缓存需要支持 IPersistStorage。 但是,这些控件应为客户端提供一种方法,以便客户端通过 IDataObject::GetData 呈现控件,以便客户端可以选择创建和管理其自己的控件演示文稿数据的缓存。
控件对其坐标使用 HIMETRIC 类型。 但是,不同的容器可以使用不同的坐标系。 容器想要在其自己的系统中接收坐标,但控件不一定知道其容器使用的坐标。 若要成功通信,控件需要一种方法将值转换为其容器的坐标。 容器使用 IOleControlSite::TransformCoords 方法提供站点对象。 控件首先在其容器的客户端站点上调用此方法,以将其坐标转换为容器的相应坐标。 然后,它可以将转换后的坐标传递给容器。
控件可以在容器的站点对象中调用 IOleControlSite::LockInPlaceActive,以防止容器尝试将控件降级到就地活动状态。 以这种方式降级控件会导致控件被停用并销毁其窗口,因此,如果控件必须在已知持续时间内维护其窗口,则可以调用 LockInPlaceActive 来保证其状态。
相关主题