VC 6
「ダイアログ プロパティ」-「拡張スタイル」タブ内の「ドラッグアンドドロップを許可」にチェック.
「MFC ClassWizard」の「クラス情報」-「詳細設定オプション」の「メッセージフィルタ」を「ウィンドウ」に.
「メッセージマップ」の「メッセージ」内の WM_DROPFILES を追加.
VC 2022 など
ダイアログの「プロパティ」で「ファイルを受け取る」を「True」に.
「クラス ウィザード」の「メッセージ」タブで「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 ; }
[…] ダイアログの場合は次の所に以前書いた. ダイアログにドロップ機能の追加 リソースエディタで「ファイルを受け取る」を「True」に. C???Dlg::OnDropFiles の実装は,それなりのコードが必要. […]