2010-07-02 24 views
0

我有一个应用程序与一个文件和文件夹列表控件,它支持拖动&拖放操作。现在我想让用户能够将Windows 7资料库(例如音乐,图片等)放入此控件中。Win7拖放:可能找出COleDataObject是否包含shell库?

在我的拖放处理程序中,我有一个COleDataObject,现在我试图找出,如果一个库已被放入控件。由于对象似乎不包含标准格式(例如CF_HDROP),因此我使用COleDataObject::BeginEnumFormatsCOleDataObject::GetNextFormat来枚举数据对象中的格式。我总共获得了5种不同的FORMATETC结构。

这里的个体结构的FORMATETC.cfFormatFORMATETC.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

任何人都可以告诉我,如果他们其中之一是指向一个shell库,如果是这样,我将如何能够确定这个库的解析名称?这些cfFormat值是否可能记录在某处?

最好的问候,

humbagumba

回答

0

这些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

他们没有你给出的精确格式的值,但应成为一个开始。

+0

是的......读一点,似乎我必须先注册其中一个shell剪贴板格式,然后才能在我的应用程序中使用它们。现在的问题是,哪种格式是正确的?我想我会尝试CFSTR_SHELLIDLIST第一..但当然,如果有人会知道这里的确切程序,我将不胜感激:) – humbagumba 2010-07-02 14:17:06

+0

我想通了。但是,无论如何,要指出我在正确的方向:) – humbagumba 2010-07-02 19:11:46

0

使用SHCreateShellItemArrayFromDataObject()将数据对象转换为IShellItem s,您可以通过它测试以查看它们是否为库。

Read more on MSDN

相关问题