本文主要介绍:MFC中,如何用对话框选择多个文件,以及如何选择文件夹(不选择文件)。
一、对话框选择多个文件
对话框的设置比较简单,只需在对话框风格中添加 OFN_ALLOWMULTISELECT即可,关键是点击确定后如何读取多个文件的路径,程序如下:
char strExt[_MAX_EXT] = "tif";//设置读取的文件类型
CString szFilter = "GeoTiff Files (*.tif)|*.tif|All Files (*.*)|*.*||";
CFileDialog dlg( TRUE, strExt,NULL,OFN_FILEMUSTEXIST | OFN_HIDEREADONLY| OFN_ALLOWMULTISELECT,szFilter );
dlg.m_ofn.lpstrTitle = _T("请选择需要处理的图像!");//设置标题
CString inPath;
CArray<CString, CString> aryFilename;
if(dlg.DoModal() == IDOK)
{
POSITION posFile=dlg.GetStartPosition();
while(posFile!=NULL)
{
aryFilename.Add(dlg.GetNextPathName(posFile));
}
}
int SelFileNum = aryFilename.GetSize();//获取选择的文件数
if(SelFileNum==0)
{
AfxMessageBox("没有选择需要处理的图像!");
return 0;
}
//aryFilename.GetAt(i) //获取第i个文件名
二、对话框选择文件夹
有时候需要选取文件夹路径,不需要选择文件,此时用CFileDialog已经不能实现,实现程序如下:
static CString ShowDialog()
{
TCHAR szFolderPath[MAX_PATH] = {0};
CString strFolderPath = TEXT("");
BROWSEINFO sInfo;
::ZeroMemory(&sInfo, sizeof(BROWSEINFO));
sInfo.pidlRoot = 0;
sInfo.lpszTitle = _T("请选择处理结果存储路径");
sInfo.ulFlags = BIF_RETURNONLYFSDIRS|BIF_EDITBOX|BIF_DONTGOBELOWDOMAIN;
sInfo.lpfn = NULL;
// 显示文件夹选择对话框
LPITEMIDLIST lpidlBrowse = ::SHBrowseForFolder(&sInfo);
if (lpidlBrowse != NULL)
{
// 取得文件夹名
if (::SHGetPathFromIDList(lpidlBrowse,szFolderPath))
{
strFolderPath = szFolderPath;
}
}
if(lpidlBrowse != NULL)
{
::CoTaskMemFree(lpidlBrowse);
}
return strFolderPath;
}
注:需要添加头文件 #include <direct.h>