Win7 Drag & Drop: можно узнать, содержит ли COleDataObject библиотеку оболочки? - PullRequest
0 голосов
/ 02 июля 2010

У меня есть приложение с управлением списком файлов и папок, которое поддерживает операции перетаскивания. Теперь я бы хотел, чтобы пользователь мог добавить библиотеку Windows 7 (например, «Музыка», «Изображения» и т. Д.) В этот элемент управления.

В моем обработчике отбрасывания у меня есть COleDataObject, и теперь я пытаюсь выяснить, была ли библиотека помещена в элемент управления. Поскольку объект, кажется, не содержит стандартный формат (например, CF_HDROP), я использую COleDataObject::BeginEnumFormats и COleDataObject::GetNextFormat для перечисления форматов в объекте данных. Я получаю в общей сложности 5 различных структур FORMATETC.

Вот список FORMATETC.cfFormat и FORMATETC.tymed членов отдельных структур:

  1. cfFormat = 0xc0a5, tymed = 0x1
  2. cfFormat = 0xc418, tymed = 0x1
  3. cfFormat = 0xc410, tymed = 0x1
  4. cfFormat = 0xc0fd, tymed = 0x4
  5. cfFormat = 0xc0fc, tymed = 0x1

Может кто-нибудь сказать мне, если один из них указывает на библиотеку оболочки, и если да, то как я мог бы, например, определить имя синтаксического анализа этой библиотеки? Возможно, эти значения в cfFormat задокументированы где-то?

С уважением,

humbagumba

Ответы [ 2 ]

0 голосов
/ 05 января 2011

Используйте SHCreateShellItemArrayFromDataObject() для преобразования объекта данных в IShellItem s, с помощью которого вы можете проверить, являются ли они библиотеками.

Подробнее о MSDN .

0 голосов
/ 02 июля 2010

Эти страницы MSDN могут помочь:

http://msdn.microsoft.com/en-us/library/bb776902%28VS.85%29.aspx http://msdn.microsoft.com/en-us/library/ff729168%28VS.85%29.aspx

У них нет точных значений формата, которые вы указали, но это должно быть начало.

...