接口介绍

来源:互联网 发布:瓷砖铺贴软件 编辑:程序博客网 时间:2024/05/29 04:57
   

      允许一个ActiveX控件嵌入到容器中,这项技术已经很长时间了。OLE文档标准(当时称为复合文档,Compound Documents)1991年创建,其中包含了OLE的主要内容。实际上OLEObject Linking and Embedding(对象链接与嵌入)的首字母缩写。在ActiveX控件出现以后,OLE文档标准也得到了增强,它允许文档服务器向外公开programmatic功能。

       现在,如果你所开发的控件需要提供一个可视化界面,并需要通过鼠标点击或类似的方式与用户实现交互,则它必须支持基本的OLE文档接口:IOleObjectIOleInPlaceObjectIOleInPlaceActiveObjectIDataObject以及IViewObject2

 

接口

说明

IOleObject

IOleObject提供了OLE文档构架的基本内容。通过该接口,容器和组件相互协商被嵌入对象的大小

IOleInPlaceObject

一个控件必须实现IOleInPlaceObject来支持在容器中实现在位激活和失效。该接口还提供了一个方法,用于通知控件,他的大小已经改变或已经在容器中删除

IOleInPlace

ActiveObject

一个控件必须实现IOleInPlaceActiveObject,以便对在控件中使用和转换加速键提供支持。IOleInPlaceActiveObject的大部分方法对于ActiveX控件是不需要的

IOleControl

IOleControl是为支持ActiveX控件而加入的一个新的接口。它所提供的方法使得与控件容器的交互得到了加强。IOleControl的主要功能是允许控件和容器在处理键盘输入时能够很好的协调工作

IDataObject

控件实现该接口主要用于为容器提供图形绘制功能。IDataObject还提供了一个属性,用于对它的属性持续性进行设置

IViewObject2

当一个控件提供一个可视的外观时需要提供IViewObject2。该接口为容器提供各种方法,允许容器通过这些方法请求控件在容器的客户区重绘控件本身

IPersistFile

IPersistFile接口比较简单,客户程序调用Load函数使永久对象装载状态数据,执行初始化操作,永久对象可以使文件保持打开状态。在Save函数中,如果参数lpszFileNameNULL,那么永久对象把状态数据写到文件中,同时清除修改标记并关闭文件;如果lpszFileName不为NULL,那么根据参数fRemember的不同值,或者执行Save As操作,或者执行Save Copy As,前者情况下也要清除修改标记并关闭文件。客户程序调用SaveCompleted函数,通知永久对象保存操作已经完成,对象可以再打开文件。GetCurFile函数返回永久对象所使用的文件名字

IPersistStorage

IPersistStorage接口并不复杂,它不仅可实现在事物方式下用存储对象保存永久状态数据,而且也支持零内存保存特性。客户程序通过SaveCompleted函数通知永久对象,它已经完成了所有的保存操作,根据参数的值,客户控制永久对象进入相应的状态。客户程序利用HandsOffStorage函数指示永久对象释放存储对象的所有接口指针,包括所有的子对象,以后由客户程序完全控制存储对象

 

 

来个例子吧,仅仅是实现了一个IPersistStorage接口:

1、我打算从d://test.bmp得到bmp的数据,然后StgCreateStorageEx,通过IPersistStorageSave函数保存到Zeng.stg(createStream了一个流ZengStream)
2、通过读取d://a.stg然后在Load函数中OpenStreamZengStream,从里面得到刚才保存的数据,再写到本地文

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文档中。



原创粉丝点击