- 締切済み
ダイアログ上でファイルドラッグ判定
はじめまして質問させてください。 VC++ 2005 MFC で開発しております。 ダイアログ上でファイルをドラッグしているかどうか 判定する実装方法を教えていただきたく思います。 仕様と致しまして、 MouseMoveメッセージで現在ファイルをドラッグしていることが 認識できれば良いです。 また、タイマーやスレッドで随時監視しておくといった方法でもかまいません。 なにかAPI等ご存知の方がおられましてら ご教授の程、宜しくお願い致します。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- bluecampus
- ベストアンサー率66% (138/209)
COleDropTargetクラスを使ってみてはどうでしょうか。
- penta1331
- ベストアンサー率64% (16/25)
こんにちは。 1)COleDropTargetの派生クラスを作る(CMyDropTargetと仮定します) 2)COleDropTarget::OnDragEnterをオーバーライドする →マウスがウィンドウ内に入った瞬間を判断する場合 3)COleDropTarget::OnDragOverをオーバーライドする →マウスがウィンドウ内をドラッグされた時に判断する場合 4)CMyDropTargetをダイアログのメンバにする 5)ダイアログのOnCreateでCMyDropTarget::Register(this)を呼ぶ 6)CMyDropTarget::OnDragEnter/CMyDropTarget::OnDragOverでゴニョゴニョする 何がドラッグされているかは、OnDragEnter・OnDragOverの引数COleDataObject* pDataObjectで判断できます。 ファイルがドロップされているかどうかであれば、pDataObject->IsDataAvailable()で ・::RegisterClipboardFormat(CFSTR_FILEDESCRIPTOR)) ・CF_HDROP ・::RegisterClipboardFormat(CFSTR_FILENAME)) ・::RegisterClipboardFormat(CFSTR_FILENAMEMAP)) 等がTRUEを返すか判断すればいいのではないでしょうか。 ドラッグ中にドラッグされているアイテムが変わることはまずないでしょうから、DragEnterで判断すれば十分です。
- php504
- ベストアンサー率42% (926/2160)
DragAcceptFiles( TRUE ); を使えばファイルがドロップされるのはわかりますがそれではだめでしょうか ドラッグだけを調べる方法は知りません
お礼
penta1331 様 ご教授ありがとうございます。 教えていただいた内容で実装できると思います。 ですが実際にCOleDropTargetクラスの派生クラスを作成して ビルドしたところエラーが出てしまいます。 なにかほかに必要なことがあるのでしょうか? ネットで調べましたことろ #include <afxole.h>でビルドが通るとあったのですが うまくいきませんでした。 ご存じであればご教授お願いいたします。 ちなみにエラー内容は 「error C2504: 'COleDropTarget' : 定義されていない基本クラスが宣言されています。」 です。 宜しくお願い致します。