TreeView とエクスプローラ間のD&Dについて

解決


LIS  2010-11-08 06:05:55  No: 72030

何度もすみません。
VC++6.0 SDK, Windows XP でWindowsプログラミングをしています。

WEB上を調べ、ツリービュー内のドラッグ&ドロップを実装しました。
今度は、ツリービューからエクスプローラ、エクスプローラからツリービューへの
ドラッグ&ドロップを実装したいと考えています。
しかし参考にできる資料がぜんぜん見当たず、困っています。

どなたか、そのソースコードまたは参考URLでも構いませんので、
教えて頂けませんでしょうか?

よろしくお願いします。

※ツリービューはCreateWindowExで作成したものです。
※ツリービューにはWindowsのエクスプローラのツリービューのような機能を
  持たせたいです。
※例えば、ツリービューのアイテムをデスクトップにD&Dすると、
  アイテム(実際にはファイル)をデスクトップにコピーしたいです。
※逆にデスクトップからツリービューへのD&Dにも対応したいです。


仲澤@失業者  2010-11-08 23:30:57  No: 72031

1.ツリービューからエクスプローラ
2.エクスプローラからツリービュー
の二者は本質的にまったく異なった課題です。

まず、簡単に実装できるのは2.で、これは、
DragAcceptFiles() について調べてみてください。
エクスプローラからドロップされたファイル名の一覧を取得する方法が
見つかると思います。

1.に関しては、原理的にその仕様が公開されていなければ、実装
できないのではないかと考えます。
自分が知っているのは「ファイルマネージャ」時代の大昔のOLEの
仕様だけですが、現在でもまだ有効かもしれません。くぐれば
出てくると思います。


LIS  2010-11-09 06:17:02  No: 72032

仲澤@失業者様、ありがとうございます。

頂いたキーワードを元に検索してみたところ、
> 1.ツリービューからエクスプローラ
http://www.gesource.jp/programming/bcb/116.htmlのサイトがみつかりました
試して見たいと思います。

> 2.エクスプローラからツリービュー
は、DragAcceptFilesで実装できそうなのですが、
ドラッグ時にどこのノードにドロップするかを描画することは出来るのでしょうか?

WM_DROPFILES でドロップ検知できること以外に、
外部からのドラッグ中のイメージを描画できるタイミングがあればいいのですが・・・

OLE と DragAcceptFiles でもう少し調べて見たいと思います。

なにか気付いたことやアドバイスなど頂けるようでしたら、
よろしくお願いします。


gak  2010-11-10 02:49:26  No: 72033

> ドラッグ時にどこのノードにドロップするかを描画することは出来るのでしょうか?
「IDropTarget」を利用すれば RegisterDragDrop() APIで指定したウィンドウに対しての
・ウィンドウ領域にoleD&Dされたアイテムが入ってきた
・ウィンドウ領域からoleD&Dされたアイテムが出て行った
・ウィンドウ上でoleD&Dされたアイテムが移動中
・ウィンドウ上でDropされた
といったイベントを掴まえられる。
後は其々のイベントに対応して処理してやればok。
> ツリービュー内のドラッグ&ドロップを実装しました
て事で既に実装経験があるようだから蛇足だろうけど、TVM_SETINSERTMARK、TVM_SELECTITEM 辺りを使えばDrop先の視覚表現が可。

「IDropTarget」でググったら沢山ページが引っ掛かったんで、詳細はそちらを参考にすれば良い。
SDK開発という事なので直接は使えないが、MFCに COleDropTarget というクラスが用意されてたりする。
IDropTarget 機能を継承したクラスを作る際には参考にできるかと。


LIS  2010-11-10 04:56:23  No: 72034

gak様、ありがとうございます。

> 「IDropTarget」を利用すれば RegisterDragDrop() APIで指定したウィンドウに対しての

そうなんですか!

> > 1.ツリービューからエクスプローラ
> はhttp://www.gesource.jp/programming/bcb/116.htmlのサイトがみつかりました

に「IDropTarget」の情報がありましたので、1も2もこのURL先を勉強すれば実装できそうですね。

実は、このサイトの内容があまりにヘビーなので驚いています。
ツリービュー内のドラッグ&ドロップも泥臭いコーディングが必要だったのですが、
なんだかそれ以上に大変そうです。

でも、このサイトを理解できれば、1も2も出来そうだと分かりましたので、元気が出てきました。

> SDK開発という事なので直接は使えないが、MFCに COleDropTarget というクラスが用意されてたりする。

出来るかは分かりませんが、最終手段としてMFCのなかをみてみたいと思います。
資料がないよりは百倍安心です(^^

どうもありがとうございます!


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加