C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 75 を表示中)
■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

返信 編集キー/


管理者用

- Child Tree -