【问题标题】:MFC/OLE Drag & Drop - freeing Globally allocated memoryMFC/OLE 拖放 - 释放全局分配的内存
【发布时间】:2009-12-08 13:43:09
【问题描述】:
如果使用 COleDataSource 和 COleDataObject,您会为希望在拖放操作中存储数据的每种剪贴板数据格式分配一些全局内存。在放置代码中,您查询对象是否具有您想要的格式的数据,然后可以访问和释放该内存。
但作为放置目标,您无法知道可能具有与拖动源关联的数据的所有格式。那么如何清除为每种格式的拖动分配的所有内存呢?
事实上,我是应该在 drop 上手动释放这些数据,还是让 MFC/Ole 自动完成?
【问题讨论】:
标签:
mfc
drag-and-drop
ole
【解决方案1】:
一旦您将句柄传递给 COleDataSource,它就拥有内存,而不是您。您不需要释放全局内存。
您应该使用 BeginEnumFormats 和 GetNextFormat 枚举 COleDataObject 对象中可用的数据格式,直到找到您感兴趣的一种。例如,如果您了解 CF_HTML,则不需要处理 CF_UNICODETEXT 或 CF_TEXT,除非用户指示您放弃 HTML 格式,只进行纯文本拖放/粘贴。