アプリ版:「スタンプのみでお礼する」機能のリリースについて

はじめまして質問させてください。

VC++ 2005 MFC で開発しております。

ダイアログ上でファイルをドラッグしているかどうか
判定する実装方法を教えていただきたく思います。

仕様と致しまして、
MouseMoveメッセージで現在ファイルをドラッグしていることが
認識できれば良いです。
また、タイマーやスレッドで随時監視しておくといった方法でもかまいません。

なにかAPI等ご存知の方がおられましてら
ご教授の程、宜しくお願い致します。

A 回答 (3件)

COleDropTargetクラスを使ってみてはどうでしょうか。

    • good
    • 0

こんにちは。



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で判断すれば十分です。
    • good
    • 0
この回答へのお礼

penta1331 様

ご教授ありがとうございます。

教えていただいた内容で実装できると思います。

ですが実際にCOleDropTargetクラスの派生クラスを作成して
ビルドしたところエラーが出てしまいます。

なにかほかに必要なことがあるのでしょうか?

ネットで調べましたことろ
#include <afxole.h>でビルドが通るとあったのですが
うまくいきませんでした。

ご存じであればご教授お願いいたします。

ちなみにエラー内容は
「error C2504: 'COleDropTarget' : 定義されていない基本クラスが宣言されています。」
です。

宜しくお願い致します。

お礼日時:2009/01/16 16:29

DragAcceptFiles( TRUE );


を使えばファイルがドロップされるのはわかりますがそれではだめでしょうか
ドラッグだけを調べる方法は知りません
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!