MFC / OLE Drag & Drop-освобождение глобально выделенной памяти
При использовании COleDataSource & COleDataObject вы выделяете некоторую глобальную память для каждого формата данных буфера обмена, который вы хотите сохранить в операции drag'n'Drop. В коде drop вы запрашиваете, есть ли у объекта данные в нужном вам формате(ах), а затем можете получить доступ и освободить эту память.
Но как цель перетаскивания вы не можете знать все форматы, которые могут иметь данные, связанные с источником перетаскивания. Итак, как вы можете очистить всю память, выделенную для перетаскивания для каждого формата?
На самом деле, am Я предполагал вручную освободить эти данные в drop, или позволить MFC/Ole сделать это автоматически?
1 ответ:
Как только вы передаете дескриптор COleDataSource, он владеет памятью, а не вы. Вам не нужно освобождать глобальную память.
Предполагается, что вы будете перечислять доступные форматы данных в объекте COleDataObject, используя BeginEnumFormats и GetNextFormat, пока не найдете тот, который вас интересует. Например, если вы понимаете CF_HTML, вам не нужно обрабатывать CF_UNICODETEXT или CF_TEXT, если пользователь не проинструктировал вас отказаться от HTML-форматирования и сделать только текстовый формат. капля / паста.