ドラッグアンドドロップでファイルやフォルダを取得する

ウインドウへファイルやフォルダをドラッグ・アンド・ドロップできるようにするにはDragAcceptFilesを実行すればいい。

ファイルやフォルダがドロップされるとそのウインドウにWM_DROPFILESメッセージが送られる。このメッセージのWPARAMはドラッグ・アンド・ドロップを処理するためのハンドル(HDROP)になっている。これを、DragQueryFile、DragQueryFile、DragFinishに渡すことでファイルやフォルダを取得する。


ここではWTLアプリケーションウイザードでダイアログベースのプロジェクトを作成、MainDlg.h内に以下のコードを追加した。

■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);

プロジェクトファイルをダウンロード


カテゴリー「ウインドウ操作」 のエントリー