The Tips for Developers > Dropしたファイル名を取得する

Drop したファイル名を取得する(最終更新日 2002/04/11)

Drop 先の部品の作成
ファイルを Drag & Drop する際、Drop 先の部品が必要である。ここでは、ダイアログボックス上のリストボックスに対して、ファイルを Drop する。

まず、適当なダイアログボックスにリストボックスを付加する。次に ClassWizard を起動し、「クラスの追加」から、CListBox クラスを基本クラスにしたクラスを生成する。(ここでは CMyListBox クラスを作成している。)

次に「メンバ変数」タブを指定し、リストボックスのコントロールIDに対し、メンバ変数を追加する。
このときのカテゴリには、「コントロール」を選択し、変数のタイプには先に生成したクラスを指定する。
(ここではメンバ変数を m_MyListBox としている。)

最後に、対象リストボックスのプロパティの拡張スタイルから「ドラッグアンドドロップを許可」を選択する。他の部品の場合も同様に行えばよい。
メッセージ関数の実装
ファイルが該当部品にドロップされた場合に発行されるメッセージは「WM_DROPFILES」である。

事前に登録してあるドロップ先の部品のクラスに対して、WM_DROPFILES メッセージのメッセージマップを作成し、メッセージ関数の追加・オーバーライドする。
ClassWizard からクラス名・オブジェクトIDに先ほど作成したクラスを指定し、メッセージに WM_DROPFILES を選択したのち、「関数の追加」ボタンを押下する。

関数が追加されたところで、実装を行う(使用している関数の詳細は、マニュアルを参照)。
01: void CMyListBox::OnDropFiles(HDROP hDropInfo)
02: {
03:  // TODO: この位置にメッセージ ハンドラ用のコードを追加するかまたはデフォルトの処理を呼び出してください
04:  char szFileName[_MAX_PATH];
05:  // uiFileCntにはDropされたアイコンの数が入る
06:  unsigned int uiFileCnt = ::DragQueryFile(hDropInfo, -1, NULL, 0);
07:  for(unsigned int i = 0;i < uiFileCnt; ++i){
08:    ::DragQueryFile(hDropInfo, i, szFileName, _MAX_PATH);
09:    this -> AddString(szFileName);
10:  }
11:
12:  CListBox::OnDropFiles(hDropInfo);
13: }

サンプルプログラム
dandd.lzh へのリンク