剪贴板格式 您所在的位置:网站首页 剪贴板程序 剪贴板格式

剪贴板格式

2024-01-04 15:42| 来源: 网络整理| 查看: 265

剪贴板格式 项目 06/13/2023

一个窗口可以在剪贴板上放置多个对象,每个对象以不同的剪贴板格式表示相同的信息。 用户不需要知道剪贴板上对象使用的剪贴板格式。

以下主题介绍剪贴板格式。

标准剪贴板格式 已注册的剪贴板格式 专用剪贴板格式 多种剪贴板格式 合成剪贴板格式 云剪贴板和剪贴板历史记录格式 标准剪贴板格式

系统定义的剪贴板格式称为 标准剪贴板格式。 标准剪贴板格式中介绍了这些 剪贴板格式。

已注册的剪贴板格式

许多应用程序使用无法转换为标准剪贴板格式且不会丢失信息的数据。 这些应用程序可以创建自己的剪贴板格式。 应用程序定义的剪贴板格式称为 已注册的剪贴板格式。 例如,如果字处理应用程序使用标准文本格式将格式化文本复制到剪贴板,则格式信息将丢失。 解决方案是注册新的剪贴板格式,例如 RTF) rtf (格式。

若要注册新的剪贴板格式,请使用 RegisterClipboardFormat 函数。 此函数采用格式的名称并返回表示已注册剪贴板格式的无符号整数值。 若要检索已注册剪贴板格式的名称,请将无符号整数值传递给 GetClipboardFormatName 函数。

如果多个应用程序注册名称完全相同的剪贴板格式,则仅注册一次剪贴板格式。 对 RegisterClipboardFormat 函数的两个调用都返回相同的值。 这样,两个不同的应用程序就可以使用已注册的剪贴板格式来共享数据。

专用剪贴板格式

应用程序可以通过定义CF_PRIVATELAST CF_PRIVATEFIRST范围内的值来标识专用剪贴板格式。 应用程序可以将专用剪贴板格式用于应用程序定义的数据格式,而无需向系统注册。

系统不会自动释放与专用剪贴板格式关联的数据句柄。 如果窗口使用专用剪贴板格式,则可以使用 WM_DESTROYCLIPBOARD 消息释放不再需要的任何相关资源。

有关 WM_DESTROYCLIPBOARD 消息的详细信息,请参阅 剪贴板所有权。

应用程序可以通过CF_GDIOBJLAST在CF_GDIOBJFIRST范围内定义专用格式,在剪贴板上放置数据句柄。 在此范围内使用值时,数据句柄不是 Windows 图形设备接口 (GDI) 对象的句柄,而是由 GlobalAlloc 函数分配的具有GMEM_MOVEABLE标志的句柄。 当剪贴板被清空时,系统会使用 GlobalFree 函数自动删除对象。

多种剪贴板格式

一个窗口可以在剪贴板上放置多个剪贴板对象,每个对象以不同的剪贴板格式表示相同的信息。 在剪贴板上放置信息时,窗口应以尽可能多的格式提供数据。 若要了解剪贴板上当前使用的格式数,请调用 CountClipboardFormats 函数。

包含最多信息的剪贴板格式应首先放在剪贴板上,然后放在描述性较小的格式上。 粘贴剪贴板中信息的窗口通常以它识别的第一种格式检索剪贴板对象。 由于剪贴板格式按它们在剪贴板上的顺序进行枚举,因此第一个识别的格式也是最具描述性的。

例如,假设用户从字处理文档中复制带样式的文本。 包含文档的窗口可能首先将数据以已注册格式(如 RTF)放在剪贴板上。 随后,窗口会将数据以描述性较低的格式(例如文本 (CF_TEXT) )放置在剪贴板上。

当剪贴板的内容粘贴到另一个窗口中时,该窗口将检索它识别的最描述性格式的数据。 如果窗口识别 RTF,则相应的数据将粘贴到文档中。 否则,文本数据将粘贴到文档中,格式信息将丢失。

合成剪贴板格式

系统在某些剪贴板格式之间隐式转换数据:如果窗口请求数据的格式不在剪贴板上,系统会将可用格式转换为请求的格式。 系统可以转换数据,如下表所示。

剪贴板格式 转换格式 CF_BITMAP CF_DIB CF_BITMAP CF_DIBV5 CF_DIB CF_BITMAP CF_DIB CF_PALETTE CF_DIB CF_DIBV5 CF_DIBV5 CF_BITMAP CF_DIBV5 CF_DIB CF_DIBV5 CF_PALETTE CF_ENHMETAFILE CF_METAFILEPICT CF_METAFILEPICT CF_ENHMETAFILE CF_OEMTEXT CF_TEXT CF_OEMTEXT CF_UNICODETEXT CF_TEXT CF_OEMTEXT CF_TEXT CF_UNICODETEXT CF_UNICODETEXT CF_OEMTEXT CF_UNICODETEXT CF_TEXT

 

如果系统为特定剪贴板格式提供自动类型转换,则将转换格式 () 放在剪贴板上没有任何好处。

如果系统为特定剪贴板格式提供自动类型转换,并且你调用 EnumClipboardFormats 来枚举剪贴板数据格式,则系统首先枚举剪贴板上的格式,然后枚举该格式可以转换为的格式。

复制位图时,最好将 CF_DIB 或 CF_DIBV5 格式放在剪贴板上。 这是因为与设备相关的位图 (CF_BITMAP) 的颜色相对于系统调色板,系统调色板可能会在粘贴位图之前更改。 如果 剪贴板 上CF_DIB或 CF_DIBV5 格式,并且窗口请求 CF_BITMAP 格式,则系统此时使用当前调色板) 呈现与设备无关的位图 (DIB。

如果将 CF_BITMAP 格式放在剪贴板 (而不是 CF_DIB) 上,则一关闭剪贴板,系统将立即呈现 CF_DIB 或 CF_DIBV5 剪贴板格式。 这可确保使用正确的调色板来生成 DIB。 如果将 CF_DIBV5 格式与位图颜色空间信息放置在剪贴板中,则当请求 CF_DIB 或 CF_DIBV5 时,系统会将位图位从位图颜色空间转换为 sRGB 颜色空间。 如果在剪贴板中没有颜色空间信息时请求 CF_DIBV5 ,系统会在 BITMAPV5HEADER 结构中返回 sRGB 颜色空间信息。 其他剪贴板格式之间的转换会按需进行。

如果剪贴板包含 CF_PALETTE 格式的数据,则应用程序应使用 SelectPalette 和 RealizePalette 函数针对该逻辑调色板实现剪贴板中的任何其他数据。

图元文件有两种剪贴板格式: CF_ENHMETAFILE 和 CF_METAFILEPICT。 为增强型图元文件指定 CF_ENHMETAFILE ,并为 Windows 图元文件指定 CF_METAFILEPICT 。

云剪贴板和剪贴板历史记录格式

某些版本的 Windows 包括 云剪贴板,它保留最近剪贴板数据项的历史记录,并且可以在用户的设备之间同步它。 如果不希望应用程序放置到剪贴板上的数据包含在剪贴板历史记录中或与其他设备同步,则应用程序可以通过将数据置于某些 已注册的剪贴板格式 (其名称为 Windows 系统已知)来控制此行为:

ExcludeClipboardContentFromMonitorProcessing :以此格式将任何数据置于剪贴板上,以防止所有剪贴板格式包含在剪贴板历史记录中或同步到用户的其他设备。 CanIncludeInClipboardHistory :以此格式在剪贴板上放置序列化的 DWORD 值零,以防止所有剪贴板格式都包含在剪贴板历史记录中,或改为放置值 1 以显式请求将剪贴板项包含在剪贴板历史记录中。 这不会影响与用户的其他设备的同步。 CanUploadToCloudClipboard :在此格式的剪贴板上放置序列化的 DWORD 值零,以防止将所有剪贴板格式同步到用户的其他设备,或者改为放置值 1,以显式请求将剪贴板项同步到其他设备。 这不会影响本地设备的剪贴板历史记录。

与其他已注册的剪贴板格式一样,需要使用 RegisterClipboardFormat 函数来获取标识上述 3 种格式中的每一种的无符号整数值。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有