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


При использовании COleDataSource & COleDataObject вы выделяете некоторую глобальную память для каждого формата данных буфера обмена, который вы хотите сохранить в операции drag'n'Drop. В коде drop вы запрашиваете, есть ли у объекта данные в нужном вам формате(ах), а затем можете получить доступ и освободить эту память.

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

На самом деле, am Я предполагал вручную освободить эти данные в drop, или позволить MFC/Ole сделать это автоматически?

1 2

1 ответ:

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

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