接口介绍
来源:互联网 发布:瓷砖铺贴软件 编辑:程序博客网 时间:2024/05/29 04:57
允许一个ActiveX控件嵌入到容器中,这项技术已经很长时间了。OLE文档标准(当时称为复合文档,Compound Documents)于1991年创建,其中包含了OLE的主要内容。实际上OLE是Object Linking and Embedding(对象链接与嵌入)的首字母缩写。在ActiveX控件出现以后,OLE文档标准也得到了增强,它允许文档服务器向外公开programmatic功能。
现在,如果你所开发的控件需要提供一个可视化界面,并需要通过鼠标点击或类似的方式与用户实现交互,则它必须支持基本的OLE文档接口:IOleObject、IOleInPlaceObject、IOleInPlaceActiveObject、IDataObject以及IViewObject2
接口
说明
IOleObject
IOleObject提供了OLE文档构架的基本内容。通过该接口,容器和组件相互协商被嵌入对象的大小
IOleInPlaceObject
一个控件必须实现IOleInPlaceObject来支持在容器中实现在位激活和失效。该接口还提供了一个方法,用于通知控件,他的大小已经改变或已经在容器中删除
IOleInPlace
ActiveObject
一个控件必须实现IOleInPlaceActiveObject,以便对在控件中使用和转换加速键提供支持。IOleInPlaceActiveObject的大部分方法对于ActiveX控件是不需要的
IOleControl
IOleControl是为支持ActiveX控件而加入的一个新的接口。它所提供的方法使得与控件容器的交互得到了加强。IOleControl的主要功能是允许控件和容器在处理键盘输入时能够很好的协调工作
IDataObject
控件实现该接口主要用于为容器提供图形绘制功能。IDataObject还提供了一个属性,用于对它的属性持续性进行设置
IViewObject2
当一个控件提供一个可视的外观时需要提供IViewObject2。该接口为容器提供各种方法,允许容器通过这些方法请求控件在容器的客户区重绘控件本身
IPersistFile
IPersistFile接口比较简单,客户程序调用Load函数使永久对象装载状态数据,执行初始化操作,永久对象可以使文件保持打开状态。在Save函数中,如果参数lpszFileName为NULL,那么永久对象把状态数据写到文件中,同时清除修改标记并关闭文件;如果lpszFileName不为NULL,那么根据参数fRemember的不同值,或者执行Save As操作,或者执行Save Copy As,前者情况下也要清除修改标记并关闭文件。客户程序调用SaveCompleted函数,通知永久对象保存操作已经完成,对象可以再打开文件。GetCurFile函数返回永久对象所使用的文件名字
IPersistStorage
IPersistStorage接口并不复杂,它不仅可实现在事物方式下用存储对象保存永久状态数据,而且也支持零内存保存特性。客户程序通过SaveCompleted函数通知永久对象,它已经完成了所有的保存操作,根据参数的值,客户控制永久对象进入相应的状态。客户程序利用HandsOffStorage函数指示永久对象释放存储对象的所有接口指针,包括所有的子对象,以后由客户程序完全控制存储对象
来个例子吧,仅仅是实现了一个IPersistStorage接口:
1、我打算从d://test.bmp得到bmp的数据,然后StgCreateStorageEx,通过IPersistStorage的Save函数保存到Zeng.stg中(createStream了一个流“ZengStream”)
2、通过读取d://a.stg然后在Load函数中OpenStream流“ZengStream”,从里面得到刚才保存的数据,再写到本地文
件1.bmp中
OLE文档接口
如果你所开发的控件需要提供一个可视化界面,并需要通过鼠标点击或类似的方式与用户实现交互,则它必须支持基本的OLE文档接口:IoleObject、IOleInPlace、IoleInPlaceActiveObject、IdataObject以及IviewObject2。下表将对这些接口进行了简要的介绍
接口
说明
IoleObject
IoleObject提供了OLE文档架构的基本内容。通过该接口,容器和组件相互协商被嵌入对象(在这里指的是一个控件)的大小,并可以获取控件的MiscStatus位
IoleInPlaceObject
一个控件必须实现IoleInPlaceObject来支持在容器中实现在位激活和失效。该接口还提供了一个方法,用于通知控件,它的大小已经改变或已经在容器中删除。
IoleInPlaceActiveObject
一个控件必须实现IoleInPlaceActiveObject,以便对在控件中使用和转换加速键提供支持。IoleInPlaceActiveObject的打部分方法对于ActiveX控件是不需要的。
IoleControl
IoleControl是为支持ActiveX控件而加入的一个新的接口。它所提供的方法使得与控件的交互得到了加强。IoleControl的主要功能是允许控件和容器在处理键盘输入时能够很好的协调工作。
IDataObject
控件实现该接口主要用于为容器提供图形绘制功能。IdataObject还提供了一个属性,用于对它的属性持续性进行设置。
IviewObject2
当一个控件提供一个可视的外观需要提供IviewObject2.该接口为容器提供各种方法,允许容器通过这些方法请求控件在容器的客户区重绘控件本身。
属性页接口
接口
说明
IspecifyPropertyPage
控件通过实现该接口,可以向空气提供它的相关属性页的一个列表。GetPages方法返回CLSID的一个数组,其中每个CLSID对应一个属性页。
IpropertyPageSite
IpropertyPageSite使得属性页组件与容器实现的属性单框架之间的通信变得更加容易。在属性页通过IpropertyPageSite::SetPageSite指针。属性页可以使用OnStatusChange方法来通知应用程序框架,它的一个或多个属性已被改变。
IpropertyPage2
IpropertyPage2由每一个属性页组件实现,并为容器提供一组方法。使用这些方法,容器可以得到属性页窗口的大小,或移动、创建、删除、激活、失效组件的属性页窗口。容器为每一个属性页创建一个框架,并通过这些方法对属性页的显示进行管理。这使得属性单的显示以及它的一些行为如同有应用程序来管理一样,但实际上,一个属性页所包含的每一个组件驻留在一个框架窗口中,但有容器来创建。
持续性接口
接口
说明
IpersistStream
IpersistStream为组件提供了一种简单的机制来维持它们状态的持续性。客户机程序(这里指容器)通过对其中的一个Ipersist*进行查询来确定是否支持持续性。并通过IpersistStream::Load和IpersistStream::Save来加载和保存数据。
IpersistStreamInit
IpersistStreamInit可以使控件在初始化时设置它的默认值。为了支持该功能,在接口中添加了一个新的方法:InitNew。
IpersistProPertyBag
IpersistProPertyBag以及容器的IproPertyBag提供一个有效地方法用于保存和装载基于文本的属性。属性包持续性(property bag persistence )机制在基于Web的环境中是非常有效的。在这样的环境中,控件的属性信息必须存储在HTML文档中。
- 接口介绍
- 接口介绍
- 接口 介绍
- ArrayAccess 接口介绍
- SCSI接口介绍
- 一些视频接口介绍
- 接口功能介绍
- SPI接口介绍
- IDisposable 接口介绍
- 常见视频接口介绍
- SPI接口介绍
- 主板常见接口介绍
- FastIo接口介绍
- EGL接口介绍
- USB线接口介绍
- NHibernate主要接口介绍
- SPI接口介绍
- Hibernate接口介绍
- DUI入门
- android实现按两次返回键退出程序
- Oracle闪回作用_hanCSDN_20130603
- 禁止手机浏览器放大缩小页面
- 验证分区表中添加或删除空分区对全局索引没影响
- 接口介绍
- Android官网新例详解-------Adding Animations讲解
- Google CodeJam Round 2 2013
- Agile Web Development with Rails第十章笔记——任务E:更智能的购物车
- OpenCV的CvMat与cvSolve函数
- oracle中一些策略规划设置
- HDU 2602 最朴实的背包问题
- hdu 1181 变形课
- android check symbols in so