ぴぐノート

Good code is its own best documentation.

MFC

【MFC入門】ダイアログにファイルをドラッグアンドドロップしよう【Visual C++】

投稿日:

ファイル操作を行うツールなどを作成する際には、ファイルをドラッグアンドドロップできると便利です。

ファイルがどこにあるか分からない場合などは参照させることも多いと思いますが、プログラムやファイルの検証をする場合、ファイルの配置がわかっていることも多いので必要な機能になるのではないでしょうか。

この記事ではダイアログベースのプログラムを作成し、リストボックスを一つ追加します。
そしてダイアログにファイルをドラッグアンドドロップするとリストにファイルパスが表示されるようなプログラムを作成してみましょう。

リストボックスを配置しよう

プロジェクトの作成方法:無料のVisual StudioをインストールしてMFCを動かそう

プロジェクトを作成したら早速リストボックスを配置しましょう。

  1. ツールボックスよりList Boxをクリックし、ダイアログをクリック。
    リストボックスのサイズは任意に調整します。
    mfc_drop_001
  2. リストボックスはデフォルトでリストのソートを行いますが、ドロップした順番が分からなくなるので、自動ソートはFalse(OFF)にします。
    mfc_drop_002
  3. リストボックスにメンバー変数を追加します。
    リストボックスを選択し、[右クリック] – [変数の追加]をクリックします。
    [アクセス]:private
    [変数の種類]:CListBox
    [コントロール変数]:チェック
    [カテゴリ]:Control
    [変数名]:m_List
  4. 次にダイアログにドラッグアンドドロップされた際に、メッセージが飛ぶようにメッセージを追加します。
    ダイアログ全体が選択されている状態で、[右クリック] – [クラスウィザード]をクリックします。
  5. クラスウィザード画面より、[メッセージ]タブをクリック。
    メッセージ一覧からWM_DROPFILESをクリック。
    ハンドラーの追加をクリックし、[OK]ボタンを押下します。
    mfc_drop_003

これで外観は完成です。

動作をコーディングしよう。

まずは、Dlg::OnInitDialog()で「ドラッグアンドドロップを受け付ける」関数を呼び出します。

8行目でDragAcceptFiles()の呼び出しを追加しています。

続いて前項で追加したイベントハンドラーに処理を記述します。

DragQueryFile()は第2引数に何を渡すかで戻り値が変わります。

  • -1を指定した場合:
    ドロップされたファイル数
  • 0~ドロップされたファイルの総数未満を指定し第3引数でNULLを指定した場合:
    ドロップしたファイル名を格納するのに必要なバッファーサイズ(文字単位)
    ※4行目で使用しているパターンです。
  • 0~ドロップされたファイルの総数未満を指定し第3引数でバッファーを指定した場合:
    格納した文字数が返ります。
    ※7行目はこのパターンです。

たったこれだけで完成です。簡単でしたね。
では実行して動作を確認してみてくださいね。
mfc_drop_004

まとめ

今回はリストボックスに単に表示させるだけですが、ファイルパスが分かればそのファイルを開いて書き込んだり編集なども可能になりますね。
実務上で使うプログラムのテストツールとしても利用価値の高い方法です。

テキストボックスなどを配置し、ドラッグアンドドロップしたファイルの情報などを表示させてみるのも面白いかもしれませんね。

スポンサーリンク

スポンサーリンク

-MFC

執筆者:

関連記事

【MFC入門】MFCについて知ろう【Visual C++】

Windowsのアプリ開発で最もポピュラーな開発環境はやはりMFCでしょうか。 MFC(Microsoft Foundation Class)とはVisual Studioに組み込まれているアプリケー …

【Visual C++】フルパスを指定してフォルダー階層を作成する。

MFCなどでファイル走査などのプログラミングを行っていると、D&D(ドラッグアンドドロップ)されたフォルダー内の全ファイル(サブフォルダー含め)に何か処理を行い、同じような階層を維持したまま別 …

【OpenCV】MFCのピクチャーコントロールに描画しよう!

前回、OpenCVを使って画像の回転や二値化などを行って動作確認をしました。 今回はMFCでダイアログベースのアプリケーションを作成し、ピクチャーコントロールにOpenCVで読み込んだ画像を表示させて …

【MFC入門】メッセージボックスにエラーコードを表示させよう

ライブラリなどを使用していると、戻り値にエラーコードを返す関数は比較的多いです。 GetLastError関数(最新のエラーコードを取得する関数)がライブラリに含まれていることもありますが、そうでない …

【MFC】フォルダー選択ダイアログの表示【Visual C++】

出力先の指定などフォルダー選択のダイアログを表示させたいことがあります。 フォルダー選択ダイアログを表示させるためには、SHBrowseForFolder関数を使います。 SHBrowseForFol …