• 締切済み

ダイアログ上でファイルドラッグ判定

はじめまして質問させてください。 VC++ 2005 MFC で開発しております。 ダイアログ上でファイルをドラッグしているかどうか 判定する実装方法を教えていただきたく思います。 仕様と致しまして、 MouseMoveメッセージで現在ファイルをドラッグしていることが 認識できれば良いです。 また、タイマーやスレッドで随時監視しておくといった方法でもかまいません。 なにかAPI等ご存知の方がおられましてら ご教授の程、宜しくお願い致します。

みんなの回答

回答No.3

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

  • penta1331
  • ベストアンサー率64% (16/25)
回答No.2

こんにちは。 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で判断すれば十分です。

youdoukou
質問者

お礼

penta1331 様 ご教授ありがとうございます。 教えていただいた内容で実装できると思います。 ですが実際にCOleDropTargetクラスの派生クラスを作成して ビルドしたところエラーが出てしまいます。 なにかほかに必要なことがあるのでしょうか? ネットで調べましたことろ #include <afxole.h>でビルドが通るとあったのですが うまくいきませんでした。 ご存じであればご教授お願いいたします。 ちなみにエラー内容は 「error C2504: 'COleDropTarget' : 定義されていない基本クラスが宣言されています。」 です。 宜しくお願い致します。

  • php504
  • ベストアンサー率42% (926/2160)
回答No.1

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

関連するQ&A

  • ダイアログボックスの移動

    VC++ であるダイアログボックスを画面外から画面内にスライドしてフェードインする機能を実装したいのですが、そういった機能を実装する場合、随時座標を変更しなければならないのでしょうか? ダイアログボックスをスライドさせるようなライブラリがあれば教えてください。 また、それが無理な場合ダイアログボックスの座標の変更方法を教えていただけるとありがたいです。 すいませんが、よろしくお願い致します。

  • ダイアログ上コントロールの動作について

    MFCでダイアログにて動作するアプリケーションを作成しています。 表示されたダイアログの枠をドラッグすると、ダイアログの大きさが変わりますが、 中にあるコントロールの大きさ・位置は変わりません。 ダイアログの大きさ変更に伴い、コントロールの大きさも変更するには、 どのような実装の仕方をすれば良いのでしょうか? 解決法をご存知の方おられましたら、ご教授お願い致します。 開発環境はVC++2005です。

  • ファイルダイアログについて

    VC++ Ver6.0を使用しています。 ファイルダイアログの「保存」(オープンの場合は「開く」) ボタンの表示を「設定」に変更したいのですが、 方法がわかりません。 ご存じの方がいたら、教えてください。 よろしくお願いいたします。

  • ファイルとフォルダのどちらも選択できるダイアログ

    環境  OS:Win2000及びWinXP  バージョン:VB6.0 SP5 ファイルとフォルダのどちらも選択できるダイアログを使用する為のAPIを探しています。 詳しく言うと、Windowsのエクスプローラ上で右クリックから新規のショートカットを作成した際の、 ウィザードにて参照ボタンを押下した際に表示される使用されているダイアログのようなものです。 フォルダまたはファイルだけのダイアログをAPIにて表示できる方法は調べて分かったのですが、 フォルダとファイルをどちらでも選択できるダイアログが見つかりませんでした。 逆にフォルダまたはファイルだけのダイアログのAPIのオプションの違いなのでしょうか? ヒント・キーワード・参考サイトだけでも良いので、 よろしくお願いします。

  • マウスドラッグで四角形を表示するには

    WinXPでVisual Basic 6.0をもちいてアプリケーションを作っています。 Formオブジェクトのデザインのときに、マウスを左クリックしてドラッグすると破線の四角形が表示されますよね。 あれと同じようなものを作成するアプリに実装したいと思っているのですが、どのようにしたら良いでしょうか。 MouseDownとMouseMoveを用いてやってみたのですが、これではForm上が四角ばかりになってしまいました。 良い方法を教えてください。

  • メインダイアログを表示させずにファイル選択ダイアログを表示

    VC++2005のMFCダイアログベースでプログラムを作成しています。 自動生成されたプログラムを何も変更しないまま実行すると、 メインのダイアログが表示されますが、 そのダイアログを表示させずに、ファイル選択ダイアログを表示させたいのです。 自分で実装しビルド実行したところ、期待動作をしましたが、 ファイル選択ダイアログを閉じた後に、画像のようなエラーが発生してしまいます。 エラーを発生させず、期待動作をさせる良い実装方法をご存知の方おられましたら、 ご教示お願い致します。 【変更実装(エラー発生)】 BOOL CtestApp::InitInstance() { … CtestDlg dlg; m_pMainWnd = &dlg; // INT_PTR nResponse = dlg.DoModal(); //コメントアウト dlg.OnBnClickedButton1(); //ファイル選択ダイアログを表示する関数 //if (nResponse == IDOK) //コメントアウト //else if (nResponse == IDCANCEL) //コメントアウト … } void CtestDlg::OnBnClickedButton1() { CFileDialog ReadDlg( TRUE, NULL, "*.txt", OFN_HIDEREADONLY | OFN_FILEMUSTEXIST, "txtファイル(*.txt)", this ); … }

  • ファイル送信時の「残り時間」の取得方法

    お世話になっております。 現在VC++6.0にてプログラミングをしています。 タイトルの通り、残り時間の取得方法をさがしています。 ファイルのコピーや移動をするときに対象のファイルサイズが大きいと プログレスバー付きのダイアログが出てきて「残り○○分」と表示されると思います。 上記例のような残り時間をLANでのデータ送信で表示させたいのですが WindowsAPIに、このような時間を取得するAPIはありますでしょうか? それとも、ファイル送信(コピー)時に別スレッドで監視し、1秒おきぐらいに (全体データサイズ - 送信済みデータサイズ) / (送信済みデータサイズ / 経過時間) で表示やるしかないのでしょうか? ご存知のかたは御教授おねがいします。<(__)> (環境:WinXP VC++6.0)

  • ダイアログの表示位置の保存

    MFCのダイアログベースでプロジェクトを作成し、 実行すると雛形のダイアログが画面中央に出現しますが、 このダイアログを任意の位置に動かし、ダイアログを閉じた後、 再実行した際に、前回終了時の位置に表示させるにはどのように実装すれば良いのでしょうか? なお、座標のデータなどは終了時にiniファイルに書き出しておき、 再起動時にそれを読み出す方法を考えています。 iniファイルへの読書きの方法については理解済みです。 お手数ですがご回答よろしくお願いします。 開発環境:VC++2005

  • csvfileがあるかを判定する関数を教えて下さい。

    こんにちは。今、とっても困ってます。助けてください。 VCで作ったプログラムなのですが、exeが開かない現象が起きました。 原因はcsvfileが存在しないためでした。存在しなかったとき、fileが無いことを判定してエラーメッセージか何かを出そうと思ってます。 質問事項 1.csvfileがあるかを見る関数 2.ダイアログを出す以外の方法で、エラーを教える方法 いい方法・案があったら教えて下さい。

  • Access ファイルかフォルダの判定

    お世話になります。 Access2010 フォーム上にActiveXのProgressBarコントロールを設置し、 そこにドラッグ&ドロップされた画像を、フォーム上のイメージ コントロールに表示するようにしました。 また、複数ファイルをドラッグ&ドロップされた場合は、エラーメッセージ を表示するようにしてます。 ここまでは問題ありません。 ただ、フォルダごとドラッグ&ドロップされた際にも、エラーメッセージを 表示させたいのですが、やり方がわかりません。 ドロップ&ドロップされたファイル、もしくはフォルダのパスは取得して いるので、そのパスからフォルダか否か判定することは可能でしょうか。 ご教示の程、宜しくお願い致します。

専門家に質問してみよう