bool MultiSelectFile(std::vector<CString>& vFiles, CWnd* pParentWnd)
{
CFileDialog dlg(TRUE, _T("打开"), NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT | OFN_ALLOWMULTISELECT,
_T(""), pParentWnd);
// 单个文件路径不能超过MAX_PATH:260
// 具体参考 dlgfile.cpp 962 TCHAR strPath[_MAX_PATH];
// 若要突破上限需要重载该类,MSDN上有相关帮助
DWORD MAXFILE = 4000 * MAX_PATH;
dlg.m_ofn.lpstrFile = new TCHAR[MAXFILE];
memset(dlg.m_ofn.lpstrFile, 0, MAXFILE);
dlg.m_ofn.nMaxFile = MAXFILE;
INT_PTR nResult = dlg.DoModal();
if (nResult != IDOK)
return false;
IShellItemArray *pResult = dlg.GetResults();
DWORD dwCount = 0;
IShellItem *pItem;
WCHAR *pFilePath;
pResult->GetCount(&dwCount);
for (DWORD i = 0; i < dwCount; i++)
{
pResult->GetItemAt(i, &pItem);
pItem->GetDisplayName(SIGDN_FILESYSPATH, &pFilePath);
CString sfilename = (CString)pFilePath;
vFiles.push_back(sfilename);
}
delete[] dlg.m_ofn.lpstrFile;
return vFiles.empty() ? false : true;
}