ダイアログにドロップ機能の追加
「ダイアログ プロパティ」-「拡張スタイル」タブ内の「ドラッグアンドドロップを許可」にチェック.
「MFC ClassWizard」の「クラス情報」-「詳細設定オプション」の「メッセージフィルタ」を「ウィンドウ」に.
「メッセージマップ」の「メッセージ」内の WM_DROPFILES を追加.
void C???Dlg::OnDropFiles(HDROP hDropInfo) { CStringArray dropFiles ; ::DropFilesToStringArray(hDropInfo,dropFiles) ; ... CDialog::OnDropFiles(hDropInfo); }
// WinMFC.hxx //******************************************************************************* // 関数名 :ドロップされたファイル名の取得 // 作成日 :’07/10/19 //******************************************************************************* BOOL DropFilesToStringArray (HDROP hDropInfo,CStringArray& strAry) { UINT nFiles = ::DragQueryFile(hDropInfo,(UINT)-1,NULL,0) ; CStringArray dropFiles ; for (UINT index=0 ; index<nFiles ; index++) { UINT len = ::DragQueryFile(hDropInfo,index, NULL,0) ; len += 1 ; // 終端の NULL 文字の分を確保 CString dropFile ; ::DragQueryFile(hDropInfo,index,dropFile.GetBuffer(len),len) ; dropFile.ReleaseBuffer() ; dropFiles.Add(dropFile) ; } strAry.Copy(dropFiles) ; return TRUE ; }
2014/06/02 v_tstring DropFilesTo (HDROP hDropInfo) { v_tstring dropFiles ; UINT nFiles = ::DragQueryFile(hDropInfo,(UINT)-1,NULL,0) ; for (UINT index=0 ; index<nFiles ; index++) { UINT len = ::DragQueryFile(hDropInfo,index, NULL,0) ; len += 1 ; // reserve last '\0' tstring dropFile ; dropFile.resize(len,0) ; ::DragQueryFile(hDropInfo,index,&dropFile[0],len) ; dropFiles.push_back(dropFile.c_str()) ; } return dropFiles ; }