ドラッグ&ドロップされたファイルを調べる

最終更新 2003 09/16

サンプルのダウンロード → API_DragAndDrop.lzh(38k)

サンプルプログラムのスクリーンショット

サンプルプログラムのスクリーンショット

全ソースコード


DragAcceptFiles 関数
DragQueryFile 関数
DragFinish 関数
    
    対応しているバージョン
    95, 98, Me, NT4.0以降, CE1.0以降, 2000, XP
        
    使用するヘッダとライブラリ
    shellapi.h
    shell32.lib
実行中のウィンドウにドラッグ&ドロップされたファイルを調べるには 次の3ステップが必要です。 1.ウィンドウが作成された時に DragAcceptFiles() 関数で   ドラッグ&ドロップができるようにする。 2.WM_DROPFILES メッセージで DragQueryFile() 関数から   ドロップされたファイルを調べる。 3.DragFinish() 関数でドラッグ&ドロップに使われたメモリを解放。 まず、1.の場合ですが WM_CREATE メッセージが呼ばれた時に処理するのが 一般的なやり方のようです。 DragAcceptFiles() 関数の2番目の引数に TRUE を指定すると ドラッグ&ドロップができるようになります。 FALSE を指定するとドラッグ&ドロップができなくなります。 DrawgAcceptFiles( hWnd, TRUEかFALSE ); FALSE の時にファイルをウィンドウにドロップしようとすると マウスカーソルがドロップ禁止マークになって拒否されます。 最初はドラッグ&ドロップができないようになっています。 ファイルがドロップされると WM_DROPFILES メッセージが呼ばれます。 ここでドロップされたファイル名を調べて、適切な処理をします。 最初にファイルがいくつドロップされたかを DragQueryFile() 関数で調べます。 2番目の引数に 0xffffffff を指定すると、DragQueryFile() 関数は ドロップされたファイル数を返してくれます。 1番目の引数には wParam を HDROP 型に型キャストして指定します。 他の引数は NULL で大丈夫です。 DragQueryFile( (HDROP)wParam, 0xffffffff, NULL, NULL ); ドロップされたファイル数が分かったら for でファイル数分ループして ドロップされたファイル名を調べます。 この部分だけ簡単に書くと こんな感じになります。 一通り処理が終わったら、最後に DragFinish() 関数を使って ウィンドウズがドラッグ&ドロップ用に確保したメモリを解放します。 これを行わない場合は、ドロップされたファイル名がずっとメモリに 残ることになります。(多分、アプリケーションが終了するまで) ドロップされたファイル名さえ取得できてしまえば、メモリに残っている データは必要ありません。 さっさと解放して空きメモリを増やしましょう。 サンプルは何だかややこしくなってしまったので、WM_DROPFILES メッセージの 中だけで、ドロップされたファイルを調べて、取得できたファイル名を メッセージボックスで表示するサンプルを以下に書いておきます。 実際はこんなに単純なことなのですが、受け取ったファイル名を変数に保存して 返すような関数を作ると、サンプルのように複雑になってしまいます・・・。

| home |