MFC / OLE Drag & Drop - освобождение глобально выделенной памяти

Если вы используете COleDataSource и COleDataObject, вы выделяете некоторую глобальную память для каждого формата данных буфера обмена, который вы хотите сохранить, в операции перетаскивания. В коде перетаскивания вы запрашиваете, есть ли у объекта данные в нужном вам формате, а затем можете получить доступ и освободить эту память.

Но как цель перетаскивания вы не можете знать все форматы, которые могут иметь данные, связанные с источником перетаскивания. Итак, как можно очистить всю память, выделенную для перетаскивания для каждого формата?

Фактически, я должен вручную освобождать эти данные при перетаскивании или позволить MFC / Ole делать это автоматически?


person Mr. Boy    schedule 08.12.2009    source источник


Ответы (1)


Как только вы передадите дескриптор COleDataSource, он будет владеть памятью, а не вы. Вам не нужно освобождать глобальную память.

Вы должны перечислять доступные форматы данных в объекте COleDataObject, используя BeginEnumFormats и GetNextFormat, пока не найдете тот, который вас интересует. Например, если вы понимаете CF_HTML, вам не нужно обрабатывать CF_UNICODETEXT или CF_TEXT, если пользователь не проинструктировал вас откажитесь от форматирования HTML и сделайте только текстовую вставку / вставку.

person Sheng Jiang 蒋晟    schedule 08.12.2009