こんにちは。
ファイルのドラッグ&ドロップについて質問させてください。
まずドロップを受け取るのはサンプルも多く、特に問題なかったのですが
逆に他のプログラムのウィンドウにファイルをドロップする方法がわかりません。
(例えばDOS窓にドロップするとパスが入力されるとか)
一応予想としては、
1.SetCapture()でマウスをキャプチャする。
2.離した位置のウィンドウを検索(何かAPIがあるはず?)。
3.WS_DROPFILESメッセージを送る。
という感じかと思うのですが、2と3の具体的な方法がわからず、検索しても出てきません。
探し方が悪いのかもしれませんが、ご指南よろしくお願いします。
すみません、環境を書くのを忘れていました。
VC++6.0で非MFCです。
> 3.WS_DROPFILESメッセージを送る。
WM_DROPFILES
それで上手く行かないなら
「OleDropTargetInterface」をお調べください。
レスありがとうございます。
その後の調査で、2については WindowsFromPoint() というAPIがありました。
3は、なんとかHDROPのフォーマットがわかったのでSendMessage()してみましたが
自分に送ると動作するものの、他アプリだと動きませんでした。
というわけでやはりOLEを使うしかなさそうですね・・・
COMはあまり使った事がないのでよく調べてみます。
DoDragDropとかIDropSourceあたりかな、キーワードは。
↓なんかズバリだと思う。
http://www13.plala.or.jp/kmaeda/winc/dragdrop3.htm
>>とおりすgさん
レスありがとうございます。
そのページは見つけていたのですが、文法がCなためわかりづらくて苦労してました。
それで、IDropSourceで検索してみると、下のURLを見つけました。
http://hp.vector.co.jp/authors/VA016117/oledragdrop1.html
こっちはクラス化したサンプルなので個人的に見やすいですが、
やはりOLEで四苦八苦しています。
なんとか一通りクラス化し、エディタやVCなどにファイルをドロップできるようになりましたが、
なぜかエクスプローラに対してドロップできない現象が発生してまた頭を悩ませてます。
というわけで引き続き試行錯誤中ですが、表題についてはひとまず解決としておきます。
今更ですが、
私はリンク先の様な事を想定してたので。
http://web.archive.org/web/20050318213350/http://forums.belution.com/ja/vc/000/174/85s.shtml
# こちらの早とちりだったようで失礼。
改めて最初の投稿を見てみると確かにちょっと紛らわしいですね。(特に後半の適当な予想部分が)
やりたい事は単純にドラッグ&ドロップの実装だったのですが、
そのリンク先も参考になります。ありがとうございます。
ちなみに前投稿のエクスプローラにドロップできない問題に関しては、
クラスでvectorを使っていた部分をポインタのnew&deleteに変更したらうまく動きました。
恐らくvectorの使い方がまずかったのだとは思いますが、
色々あってあまり詳しく検証はしていません。
ツイート | ![]() |