Drop されたファイルを受け取る



Windows エクスプローラから Drag&Drop されたファイルを List Box に追加します。
クリップボードの扱い方が Copy & Paste と同じなので「Clipboard のプログラム」と合わせて参照して下さい。

前田稔(Maeda Minoru)の超初心者のプログラム入門

Drag&Drop のプログラムには、幾通りかの方法があります。
これ以外にも私が知らない様々な方法が存在するかも知れません。
  1. Win32 API を使って Drop されたファイルリストを取得する方法。
    Drag&Drop されたファイルを受け取るだけなら最も簡単な方法です。
  2. MFC を使ってプログラミングする方法。
    Drag&Drop をプログラミングする比較的簡単な方法ですが、MFC は私の肌に合わないので説明しません。
  3. C言語ベースの OLE の API を使ってプログラミングする方法。
    本格的なC言語ベースのプログラムですが、オブジェクト指向ではありません。
  4. C++ の OLE の API を使ってプログラミングする方法。
    C++ のオブジェクト指向の本格的なプログラミングです。
MFC(Microsoft Foundation Class) とは、Microsoft が提供する Windows プログラミング用のクラスライブラリのことです。
API(Application Programming Interface) とは、アプリケーションと OS が互いに情報の伝達を行なうために決められた 標準規約のことです。
OLE(Object Linking and Embedding) とは、DCOM をベースとする複合ドキュメントの技術のことで、ActiveX の一つで、 表計算の表や作図ソフトウェアの図を、ワードプロセッサの文書に張り付けたりすることを実現するための技術です。

プログラムの説明

  1. 新規プロジェクト(Drop)で空のプロジェクトを作成して下さい。
  2. ページ先頭の画面を参考にして DialogBox に EditControl と ListBox を配置して下さい。
    IDを次のように設定して下さい。
    BOX ID
    DialogBox IDD_DIALOG1
    EditControl IDC_EDIT1
    ListBox IDC_LIST1
  3. crtdbg.h を取り込んで下さい。
    あと必要なのは Drop されたファイルリストを処理する関数の宣言だけです。
        #include <windows.h>
        #include <crtdbg.h>
        #include "resource.h"
    
        LRESULT CALLBACK DlgProc(HWND, UINT, WPARAM, LPARAM);
        int     DropFile(HWND hdlg, WPARAM WP);
        
  4. DragAcceptFiles() に TRUE を設定して実行すると、DragDrop 操作で WM_DROPFILES: がポストされてきます。
    WM_DROPFILES: では、Drop されたファイルリストを ListBox に登録する関数 DropFile() を呼びます。
        switch(uMsg)
        {   case WM_INITDIALOG:
                DlgDirList(hDlg,szDir,IDC_LIST1,IDC_EDIT1,DDL_DIRECTORY | DDL_DRIVES);
                DragAcceptFiles(hDlg,TRUE);
                break;
            case WM_DROPFILES:
                DropFile(hDlg,WP);
                break;
        
  5. ファイルリストを ListBox に登録する関数です。
    HDROP のハンドルを wParam から取得します。
    後は File List を Copy&Paste する と同じです。
        int DropFile(HWND hdlg, WPARAM wp)
        {   HDROP   hDrop;
                :
            hDrop= (HDROP)wp;
                :
        
  6. [ビルド]から[実行]を選択するとビルドに続いて、エラーが無ければプログラムが実行されます。
    エクスプローラで幾つかのファイルを選択して List Box にドラッグして下さい。
    ドラッグされたファイルリストが ListBox に追加されます。
    ただし ListBox に追加されるだけで、ファイルが実際にコピーされる訳ではありません。

【演習】

エクスプローラから「ドラッグ & ドロップ」したファイル名を取得して、実際にファイルを格納してみて下さい。

超初心者の方のために全ソースコードを掲載します。 (^_^;)
全ソースコード

超初心者のプログラム入門(Win32API C++)