何度もすみません。
VC++6.0 SDK, Windows XP でWindowsプログラミングをしています。
WEB上を調べ、ツリービュー内のドラッグ&ドロップを実装しました。
今度は、ツリービューからエクスプローラ、エクスプローラからツリービューへの
ドラッグ&ドロップを実装したいと考えています。
しかし参考にできる資料がぜんぜん見当たず、困っています。
どなたか、そのソースコードまたは参考URLでも構いませんので、
教えて頂けませんでしょうか?
よろしくお願いします。
※ツリービューはCreateWindowExで作成したものです。
※ツリービューにはWindowsのエクスプローラのツリービューのような機能を
持たせたいです。
※例えば、ツリービューのアイテムをデスクトップにD&Dすると、
アイテム(実際にはファイル)をデスクトップにコピーしたいです。
※逆にデスクトップからツリービューへのD&Dにも対応したいです。
1.ツリービューからエクスプローラ
2.エクスプローラからツリービュー
の二者は本質的にまったく異なった課題です。
まず、簡単に実装できるのは2.で、これは、
DragAcceptFiles() について調べてみてください。
エクスプローラからドロップされたファイル名の一覧を取得する方法が
見つかると思います。
1.に関しては、原理的にその仕様が公開されていなければ、実装
できないのではないかと考えます。
自分が知っているのは「ファイルマネージャ」時代の大昔のOLEの
仕様だけですが、現在でもまだ有効かもしれません。くぐれば
出てくると思います。
仲澤@失業者様、ありがとうございます。
頂いたキーワードを元に検索してみたところ、
> 1.ツリービューからエクスプローラ
はhttp://www.gesource.jp/programming/bcb/116.htmlのサイトがみつかりました。
試して見たいと思います。
> 2.エクスプローラからツリービュー
は、DragAcceptFilesで実装できそうなのですが、
ドラッグ時にどこのノードにドロップするかを描画することは出来るのでしょうか?
WM_DROPFILES でドロップ検知できること以外に、
外部からのドラッグ中のイメージを描画できるタイミングがあればいいのですが・・・
OLE と DragAcceptFiles でもう少し調べて見たいと思います。
なにか気付いたことやアドバイスなど頂けるようでしたら、
よろしくお願いします。
> ドラッグ時にどこのノードにドロップするかを描画することは出来るのでしょうか?
「IDropTarget」を利用すれば RegisterDragDrop() APIで指定したウィンドウに対しての
・ウィンドウ領域にoleD&Dされたアイテムが入ってきた
・ウィンドウ領域からoleD&Dされたアイテムが出て行った
・ウィンドウ上でoleD&Dされたアイテムが移動中
・ウィンドウ上でDropされた
といったイベントを掴まえられる。
後は其々のイベントに対応して処理してやればok。
> ツリービュー内のドラッグ&ドロップを実装しました
て事で既に実装経験があるようだから蛇足だろうけど、TVM_SETINSERTMARK、TVM_SELECTITEM 辺りを使えばDrop先の視覚表現が可。
「IDropTarget」でググったら沢山ページが引っ掛かったんで、詳細はそちらを参考にすれば良い。
SDK開発という事なので直接は使えないが、MFCに COleDropTarget というクラスが用意されてたりする。
IDropTarget 機能を継承したクラスを作る際には参考にできるかと。
gak様、ありがとうございます。
> 「IDropTarget」を利用すれば RegisterDragDrop() APIで指定したウィンドウに対しての
そうなんですか!
> > 1.ツリービューからエクスプローラ
> はhttp://www.gesource.jp/programming/bcb/116.htmlのサイトがみつかりました。
に「IDropTarget」の情報がありましたので、1も2もこのURL先を勉強すれば実装できそうですね。
実は、このサイトの内容があまりにヘビーなので驚いています。
ツリービュー内のドラッグ&ドロップも泥臭いコーディングが必要だったのですが、
なんだかそれ以上に大変そうです。
でも、このサイトを理解できれば、1も2も出来そうだと分かりましたので、元気が出てきました。
> SDK開発という事なので直接は使えないが、MFCに COleDropTarget というクラスが用意されてたりする。
出来るかは分かりませんが、最終手段としてMFCのなかをみてみたいと思います。
資料がないよりは百倍安心です(^^
どうもありがとうございます!
ツイート | ![]() |