ウインドウへファイルやフォルダをドラッグ・アンド・ドロップできるようにするにはDragAcceptFilesを実行すればいい。
ファイルやフォルダがドロップされるとそのウインドウにWM_DROPFILESメッセージが送られる。このメッセージのWPARAMはドラッグ・アンド・ドロップを処理するためのハンドル(HDROP)になっている。これを、DragQueryFile、DragQueryFile、DragFinishに渡すことでファイルやフォルダを取得する。
ここではWTLアプリケーションウイザードでダイアログベースのプロジェクトを作成、MainDlg.h内に以下のコードを追加した。
#include "atlstr.h"
■MainDlg.hのBEGIN_MSG_MAPとEND_MSG_MAPの間に追加
//ドラッグアンドドロップ用メッセージマップ MESSAGE_HANDLER(WM_DROPFILES, OnDropFiles)
■MainDlg.hのCMainDlgにメンバ関数として追加
//
// ドラッグアンドドロップ用メッセージハンドラ
//
LRESULT OnDropFiles(UINT /*uMsg*/, WPARAM wParam, LPARAM /*lParam*/, BOOL& bHandled)
{
UINT i;
UINT nSize;
UINT ret;
HDROP hDrop;
TCHAR pszBuff[MAX_PATH*10];
CAtlString strMessage;
hDrop = (HDROP)wParam;
nSize = ::DragQueryFile(hDrop,-1,NULL,0);
for(i = 0; i < nSize; i++)
{
ret = ::DragQueryFile(hDrop,i,pszBuff,MAX_PATH*10);
if(ret == -1)
continue;
strMessage += pszBuff;
strMessage += _T("\n");
}
::DragFinish(hDrop);
MessageBox(strMessage);
return 0;
}
■MainDlg.hのOnInitDialog()内に追加
//ドラッグアンドドロップを受け入れる ::DragAcceptFiles(m_hWnd,TRUE);
