2010-07-02 26 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

相關問題