| ■43792 / ) |
Re[1]: ドラッグアウト |
□投稿者/ れい (860回)-(2009/11/19(Thu) 03:47:21)
|
■No43791 (レイバー さん) に返信 > オブジェクトをドラッグしてウィンドウを超え、フォルダに移動する、という処理を書くには、なにとなにを実装すればよいのでしょう?
フォルダとはエクスプローラーのフォルダですね?
既にファイルシステム上に存在する「ファイル」もしくは「フォルダ」を エクスプローラーや他のアプリケーションにドロップするのは DataObjectにFileDropを指定してパス文字列を渡すだけで出来ます。
これはあちこちにサンプルがあります。 DataFormats.FileDropやDataObjectなどで探すとすぐに出てきます。
その他のオブジェクトを「ファイル」としてドロップするのはなかなか困難です。 ・オブジェクトのストリームとしての表現を作成 ・OLE処理のきちんと行えるDataObjectを自分で実装する ・DataObjectにFileDescriptorとしてファイルとしての情報を登録する ・DataObjectにファイルの中身を示すIStreamを登録する ・ドロップ後、要求に応じてファイルの中身を返す ・完了後、なんとかしてIStreamを廃棄する などの処理が必要です。
で、これがかなりめんどくさい処理になります。
ドロップが起きる瞬間、つまりQueryContinueDragでDragActionがDropになるときに ファイルを作成し、そのパスをFileDropとして返すのが楽です。 この場合、ファイルを作成している間はエクスプローラー・アプリ共に停止するのが問題です。
この辺にもう少し丁寧に書いてあります。
http://social.msdn.microsoft.com/Forums/ja-JP/csharpgeneralja/thread/14b5f137-f2fc-4d28-b79d-2635bdb5d8b8
|
|