//用CFileDialog同时打开多文件,方式1和方式2

CString strFilter = _T("所有支持的视频文件|*.ts;*.mp4;*.flv|MPEG-2 视频文件|*.ts|MPEG-4 视频文件|*.mp4|Adobe Flash Video|*.flv|其他文件类型|*.*||");
CFileDialog dlg(TRUE, _T(""), _T(""), OFN_ALLOWMULTISELECT | OFN_ENABLESIZING | OFN_HIDEREADONLY, strFilter);
// Create buffer for file names.
const DWORD numberOfFileNames = 100;
const DWORD fileNameMaxLength = MAX_PATH + 1;
const DWORD bufferSize = (numberOfFileNames * fileNameMaxLength) + 1;
TCHAR* filenamesBuffer = new TCHAR[bufferSize];
// Initialize beginning and end of buffer.
filenamesBuffer[0] = NULL;
filenamesBuffer[bufferSize - 1] = NULL;
memset(filenamesBuffer, 0, sizeof(TCHAR)* bufferSize);
// Attach buffer to OPENFILENAME member.
dlg.m_ofn.lpstrFile = filenamesBuffer;
dlg.m_ofn.nMaxFile = bufferSize;
// Create array for file names.
CString fileNameArray[numberOfFileNames];
if (dlg.DoModal() == IDOK)
{
	// Retrieve file name(s).
	POSITION fileNamesPosition = dlg.GetStartPosition();
	int iCtr = 0;
	while (fileNamesPosition != NULL && iCtr < numberOfFileNames)
	{
  fileNameArray[iCtr] = dlg.GetNextPathName(fileNamesPosition);
  //其中fileNameArray[iCtr] 中为路径地址
  iCtr++;
	}
}

//------------------------------------------------------------------------

// 上述方式一不能满足搜索不同目录下同时打开多个文件的需求


//方式二,此方式解决不同目录下同时打开多个文件获取文件路径的需求

//========================================================================

CString strFilter = _T("所有支持的视频文件|*.ts;*.mp4;*.flv|MPEG-2 视频文件|*.ts|MPEG-4 视频文件|*.mp4|Adobe Flash Video|*.flv|其他文件类型|*.*||");
CFileDialog OpenDialog(TRUE, _T(""), _T(""), OFN_ALLOWMULTISELECT | OFN_ENABLESIZING | OFN_HIDEREADONLY, strFilter);
if (OpenDialog.DoModal() == IDOK)
{
	CString path;
	IShellItemArray* pResult = OpenDialog.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);//其中pFilePath为目标文件的绝对路径
	}
}