0

我正在处理的一些代码使用COleDataSource::CacheGlobalData,将 HGLOBAL 作为 CF_TEXT 传递,指向为文本分配的一些内存。我还想添加一个数值,以便放置目标可以访问文本或数值。

这怎么能很容易做到呢?可以使用不同的 CF_ 值进行第二次 CacheGlobalData 调用吗?由于我只想传递一个整数(DWORD),我可以避免分配一个凌乱的 HGLOBAL 吗?

或者我是否必须将我想要发送的所有数据编码到一块内存中?CacheGlobalData 是否只允许将一个对象附加到拖动事件?

4

1 回答 1

0

您可以多次调用 CacheGlobalData。对于每种剪贴板格式,剪贴板存储由 CacheGlobalData 设置的最后一个值。例如,当您拖动一段文本时,IE 以 CF_UNICODETEXT、CF_TEXT 和 CF_HTML 格式存储数据。一般来说,一个应用程序应该提供尽可能多的格式的数据,以便更多的应用程序可以识别数据。

为避免数据在往返过程中丢失,包含最多信息的剪贴板格式应首先放在剪贴板上,然后是描述性较差的格式。例如,CF_HTML 在前,CF_UNICODETEXT 在后,CF_TEXT 在后。

您可能需要为数值注册自己的格式并修改可以理解您自己格式的放置目标应用程序。没有一种标准格式采用数值。

剪贴板数据必须存储在全局内存中。如果您不喜欢这样,您可以传递 NULL 并处理 WM_RENDERFORMAT 或 WM_RENDERALLFORMATS 消息,以便在需要时提供数据,但对于 DWORD,这不值得。

于 2009-12-04T19:32:54.160 回答