3


3

フォームからWindowsにドラッグアンドドロップ。ドロップ先を取得

コントロールオブジェクト(たとえば、ListViewItem)をフォームからドラッグして、ユーザー指定の場所(たとえば、デスクトップやフォルダー)にドラッグする必要があるVB.NETでアプリを開発しています。 。

ただし、「ListViewItem」が表すように「コピー」することを目的としたファイルはまだ存在しません。 ダウンロードして、ユーザーが指定した場所に配置する必要があります。 宛先ドロップのパス/場所を取得できますか? 次に、ファイルのダウンロードに進み、使用が指定された場所に配置します。

私はhttps://stackoverflow.com/questions/1935925/drag-drop-of-a-dynamically-created-shortcut [同様の問題]に関する他の質問を見てきました。そのショートカットがどこに行ったのか、宛先の場所にフラグを立てる方法を判断する方法ではないようです。

本質的に、私は他の場所で言及したように、何らかの種類の「ダイナミックリンク」または「仮想ファイル」が必要になると考えています。 次に、ドロップ操作の後、何らかの形でアプリケーションからこの「リンク」にアクセスし、ファイルのダウンロードに進み、最終的なドロップ先に配置します。

どんな助けでも感謝します、前もって感謝します!

 +
*結果:*

Roger Lipscombeは、他の記事へのリンクを含むリンクを提供しました。 次のリンクは、マネージコードで必要な正確なデータを提供せずにドラッグドロップ操作を実装するのに役立つことがあります。

3 Answer


5


IDataObject

GetData実装でCFSTR_PREFERREDDROPEFFECTに応答することで、実際にドロップが発生するまで、CFSTR_FILEDESCRIPTORへのIDataObject :: GetData呼び出しを遅らせるようExplorerに依頼できます。 例については、http://hg.mozilla.org/mozilla-central/file/b49a6a8a4973/widget/src/windows/nsDataObj.cppを参照してください。 ターゲットが仮想フォルダーである場合、ドロップターゲットはユーザー設定を尊重する義務はありません。

Explorerは、次の順序でファイル名のクリップボード形式をチェックします

  1. CF_HDROP

  2. CFSTR_FILEDESCRIPTOR / CFSTR_FILECONTENTS

  3. CFSTR_FILENAME

CF_HDROPは、ソースファイルが実際にファイルシステムのどこかに存在する必要があるため、使用しないでください。 代わりにCFSTR_FILEDESCRIPTOR / CFSTR_FILECONTENTSを使用してください。


2


申し訳ありませんが、DnD操作のターゲットパスを取得する方法はありません。 ドロップターゲットにはパスさえないかもしれないからです!

詳細な説明については、http://blogs.msdn.com/oldnewthing/archive/2007/05/07/2453927.aspx [こちら]をご覧ください。

もちろん、DnDにフックしてからターゲットウィンドウを要求し、そこからウィンドウがわかっている場合はターゲットパスを見つけようとすることができます(たとえば、ウィンドウはエクスプローラープロセスに属します)。


2


「ファイル」がドロップされた場所を本当に知りたいですか? または、データを事前に提供したくないだけですか?

後者の場合、レイモンドチェンは、ネイティブコードでhttp://blogs.msdn.com/oldnewthing/archive/tags/What+a+drag/default.aspx [仮想ドラッグアンドドロップの実装に関するシリーズ]を提供しています。 David Anson http://blogs.msdn.com/delay/archive/2009/10/26/creating-something-from-nothing-developer-friendly-virtual-file-implementation-for-net.aspx [管理対象に変換しますコード]およびhttp://blogs.msdn.com/delay/archive/2009/11/04/creating-something-from-nothing-asynchronously-developer-friendly-virtual-file-implementation-for-net-improved.aspx [非同期サポートを追加]。