一、概述
---- 在Windows操作系统中存在两种剪贴板机制:Windows标准剪贴板和OLE剪贴板机
制。
---- 标准的Windows剪贴板是一个被所有Windows应用
程序共享的系统服务,因此它并
没有自己的句柄或类。但你可以通过CWnd类的成员函数来管理剪贴板。
---- 自从OLE(Object Linking and Embedding,对象
链接和嵌入)诞生之后,
Windows操作系统中便出现了第二种剪贴板机制——OLE剪贴板机制。标准的Windows剪
贴板API(Application Programming Interface,应用
程序编程接口)依然可用,但是
他已经被OLE数据传输机制来实现了。OLE支持UDT(Uniform Data Transfer,统一数据
传输),并可以通过拖放操作实现剪贴板的剪切、复制和粘贴等操作。OLE剪贴板除了
拥有标准Windows剪贴板的性能外,还支持传输用户自定义的剪贴板格式,并能够在传
输数据时绑定OLE格式(如字体、字号等)。OLE剪贴板机制将成为更为主要的数据传输
机制。
---- 本文将简要叙述标准Windows剪贴板的实现,并将重点放在讨论如何通过Visual
C++实现OLE剪贴板上。
---- 二、选择适当的剪贴板机制
---- 在选择使用何种剪贴板机制时通常应遵循下面的原则:
---- 如果应用
程序在将来又可能具有新的性能(比如现在只需要传输纯文本,但将来
有可能需要另外传输字体等特性),那么使用OLE剪贴板。
---- 如果你正在使用一个OLE应用
程序,或者你希望使用任何OLE特性(如拖放等)那
么你应当使用OLE剪贴板机制。
---- 如果你提供了OLE格式(如字体、字号等),那么使用OLE剪贴板机制。
---- 三、使用Windows标准剪贴板
---- 大多数Windows下的应用
程序支持剪切或复制数据到Windows剪贴板中以及从剪贴
板粘贴数据至目的地。在这个过程中,剪贴板数据格式在多种应用
程序之间发生了变
化。系统构架仅仅通过实现一些有限的类来支持一些有限的剪贴板格式,下表列出了
Windows标准剪贴板支持的格式(第一列“值”将在下面的
程序代码中使用)。
值 含义
CF_BITMAP 一个对应于位图的句柄(HBITMAP)。
CF_DIB 一个包含BITMAPINFO结构并且
跟着位图数据的内存对象。
CF_DIF 数据交互格式
CF_DSPBITMAP 有一个私有格式的位图显示格式。
CF_DSPENHMETAFILE 有一个私有格式的增强的元文件的显示格式。
CF_DSPMETAFILEPICT 有一个私有格式的元图显示格式。
CF_DSPTEXT 有一个私有格式的文本显示格式。
CF_ENHMETAFILE 一个增强的元文件(HENHMETAFILE结构)的句柄。
CF_GDIOBJFIRST到 CF_GDIOBJLAST 应用软件定义
的一系列GDI对象的整型值。
CF_HDROP 一个HDROP类型的句柄,用来标识一列文件。
CF_METAFILEPICT 一个使用METAFILEPICT结构定义的元图文件的句柄。
CF_OEMTEXT 预定义的字符的文本格式,每一行都绑定
一个CR-LF字符,并且用一个空字符表示数据结尾。
CF_OWNERDISPLAY 剪贴板拥有者的显示格式,
剪贴板的拥有者必须显示并且更新剪贴板的观察器窗口,
并且接收WM_ASKCBFORMATNAME、WM_HSCROLLCLIPBOARD、
WM_PAINTCLIPBOARD、WM_SIZECLIPBOARD以及
WM_VSCROLLCLIPBOARD等消息,hMem参数必需为NULL。
CF_PALETTE 调色板的句柄
CF_PRIVATEFIRST到CF_PRIVATELAST 私有的剪贴板格式的整型值。
CF_RIFF 能够提交比CF_WAVE标准波表文件格式更为复杂的音频数据
CF_SYLK 微软公司的SYLK(Symbolic Link,符号链接)格式
CF_TEXT 文本格式
CF_WAVE 使用一种标准波表文件格式如11kHz或22kHz等
PCM(Pulse Code Modulation,脉冲编码调制器)提交音频数据。
CF_TIFF TIFF图形格式
CF_UNICODETEXT Unicode文本格式(
注意:仅适用于Windows NT或Windows 2000操作系统)
---- 表1 常用的标准剪贴板格式
---- 要编写一个实现剪切和复制命令的函数,就要在你的应用