本文主要介紹: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>