COleDataSource - 设置拖动和放大删除应用程序间的数据

时间:2009-12-04 15:21:23

标签: c++ mfc drag-and-drop ole

我正在处理的一些代码使用COleDataSource::CacheGlobalData,将CF_TEXT传递给指向为文本分配的一些内存的HGLOBAL。我还想添加一个数值,因此drop-target可以访问文本或数值。

如何轻松完成?可以使用不同的CF_值进行第二次CacheGlobalData调用吗?既然我只想传递一个整数(DWORD),我可以避免分配一个凌乱的HGLOBAL吗?

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

1 个答案:

答案 0 :(得分:0)

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

为避免往返行程中数据丢失,应首先将包含最多信息的剪贴板格式放在剪贴板上,然后再使用描述性较少的格式。例如,首先是CF_HTML,CF_UNICODETEXT是第二个,CF_TEXT是最后一个。

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

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