欢迎来到天天文库
浏览记录
ID:37712010
大小:44.50 KB
页数:14页
时间:2019-05-29
《OLE剪贴板技术》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、----一、概述 ----在Windows操作系统中存在两种剪贴板机制:Windows标准剪贴板和OLE剪贴板机制。 ----标准的Windows剪贴板是一个被所有Windows应用程序共享的系统服务,因此它并没有自己的句柄或类。但你可以通过CWnd类的成员函数来管理剪贴板。 ----自从OLE(ObjectLinkingandEmbedding,对象链接和嵌入)诞生之后,Windows操作系统中便出现了第二种剪贴板机制——OLE剪贴板机制。标准的Windows剪贴板API(ApplicationProgrammingInte
2、rface,应用程序编程接口)依然可用,但是他已经被OLE数据传输机制来实现了。OLE支持UDT(UniformDataTransfer,统一数据传输),并可以通过拖放操作实现剪贴板的剪切、复制和粘贴等操作。OLE剪贴板除了拥有标准Windows剪贴板的性能外,还支持传输用户自定义的剪贴板格式,并能够在传输数据时绑定OLE格式(如字体、字号等)。OLE剪贴板机制将成为更为主要的数据传输机制。 ----本文将简要叙述标准Windows剪贴板的实现,并将重点放在讨论如何通过VisualC++实现OLE剪贴板上。 ----二、选择适当
3、的剪贴板机制 ----在选择使用何种剪贴板机制时通常应遵循下面的原则: ----如果应用程序在将来又可能具有新的性能(比如现在只需要传输纯文本,但将来有可能需要另外传输字体等特性),那么使用OLE剪贴板。 ----如果你正在使用一个OLE应用程序,或者你希望使用任何OLE特性(如拖放等)那么你应当使用OLE剪贴板机制。 ----如果你提供了OLE格式(如字体、字号等),那么使用OLE剪贴板机制。 ----三、使用Windows标准剪贴板 ----大多数Windows下的应用程序支持剪切或复制数据到Windows剪贴板中以
4、及从剪贴板粘贴数据至目的地。在这个过程中,剪贴板数据格式在多种应用程序之间发生了变化。系统构架仅仅通过实现一些有限的类来支持一些有限的剪贴板格式,下表列出了Windows标准剪贴板支持的格式(第一列“值”将在下面的程序代码中使用)。 值 含义 CF_BITMAP一个对应于位图的句柄(HBITMAP)。 CF_DIB 一个包含BITMAPINFO结构并且 跟着位图数据的内存对象。 CF_DIF 数据交互格式 CF_DSPBITMAP有一个私有格式的位图显示格式。 CF_DSPENHMETAFILE有一个私有格式的增强的元
5、文件的显示格式。 CF_DSPMETAFILEPICT有一个私有格式的元图显示格式。 CF_DSPTEXT有一个私有格式的文本显示格式。 CF_ENHMETAFILE一个增强的元文件(HENHMETAFILE结构)的句柄。 CF_GDIOBJFIRST到CF_GDIOBJLAST应用软件定义 的一系列GDI对象的整型值。 CF_HDROP一个HDROP类型的句柄,用来标识一列文件。 CF_METAFILEPICT一个使用METAFILEPICT结构定义的元图文件的句柄。 CF_OEMTEXT预定义的字符的文本格式,每
6、一行都绑定 一个CR-LF字符,并且用一个空字符表示数据结尾。 CF_OWNERDISPLAY剪贴板拥有者的显示格式, 剪贴板的拥有者必须显示并且更新剪贴板的观察器窗口, 并且接收WM_ASKCBFORMATNAME、WM_HSCROLLCLIPBOARD、 WM_PAINTCLIPBOARD、WM_SIZECLIPBOARD以及 WM_VSCROLLCLIPBOARD等消息,hMem参数必需为NULL。 CF_PALETTE调色板的句柄 CF_PRIVATEFIRST到CF_PRIVATELAST私有的剪贴板格式的
7、整型值。 CF_RIFF能够提交比CF_WAVE标准波表文件格式更为复杂的音频数据 CF_SYLK微软公司的SYLK(SymbolicLink,符号链接)格式 CF_TEXT文本格式 CF_WAVE使用一种标准波表文件格式如11kHz或22kHz等 PCM(PulseCodeModulation,脉冲编码调制器)提交音频数据。 CF_TIFFTIFF图形格式 CF_UNICODETEXTUnicode文本格式( 注意:仅适用于WindowsNT或Windows2000操作系统) ----表1 常用的标准剪贴板格式
8、 ----要编写一个实现剪切和复制命令的函数,就要在你的应用程序中实现选定操作;要编写一个实现粘贴命令的函数,就需要请求剪贴板来检测它是否包含你的应用程序能够支持的数据。下面的代码实现了复制命令,其它实现可仿照进行,在此不再赘言。
此文档下载收益归作者所有