MFC 浏览选择文件、文件夹对话框
1、浏览选择文件:
(1)浏览选择文件 简单:选择单个文件
CString SelectSingleFile()
{
CString filePath = _T("");
CFileDialog dlgFile(TRUE, NULL, NULL, OFN_HIDEREADONLY, _T("Describe Files (*.txt)|*.txt|All Files (*.*)|*.*||"), NULL);
if (dlgFile.DoModal() == IDOK)
{
filePath = dlgFile.GetPathName();
}
return filePath;
}
(2)浏览选择文件 深入:选择多个文件
void SelectFiles(vector<CString>& all_sel_files)
{
CString fileName = _T("");
CFileDialog dlgFile(TRUE, _T("*.txt"), NULL, OFN_ALLOWMULTISELECT | OFN_HIDEREADONLY | OFN_FILEMUSTEXIST, _T("Describe Files(*.txt)|*.txt|"), NULL);
dlgFile.m_ofn.lpstrTitle = _T("选择文件");
if (dlgFile.DoModal() == IDOK)
{
POSITION fileNamesPosition = dlgFile.GetStartPosition();
while (fileNamesPosition != NULL)
{
fileName = dlgFile.GetNextPathName(fileNamesPosition);
all_sel_files.push_back(fileName);
}
}
}
2、浏览选择文件夹:
(1)浏览选择文件夹 简单:默认设置
CString SelFilePathSimple()
{
TCHAR szFolderPath[MAX_PATH] = { 0 };
CString strFolderPath = _T("");
BROWSEINFO sInfo;
::ZeroMemory(&sInfo, sizeof(BROWSEINFO));
LPITEMIDLIST lpidlBrowse = ::SHBrowseForFolder(&sInfo);
if (lpidlBrowse != NULL)
{
if (::SHGetPathFromIDList(lpidlBrowse, szFolderPath))
{
strFolderPath = szFolderPath;
}
::CoTaskMemFree(lpidlBrowse);
}
return strFolderPath;
}
(2)浏览选择文件夹 深入:参数配置、回调函数
// callback function
INT CALLBACK BrowseCallbackProc(HWND hwnd, UINT uMsg, LPARAM lp, LPARAM pData)
{
static int count = 0;
CString msg;
count++;
msg.Format(_T("BrowseCallbackProc:%d;\n"), count);
TRACE(msg);
return 0;
}
CString SelFilePath()
{
TCHAR szFolderPath[MAX_PATH] = { 0 };
CString strFolderPath = _T("");
BROWSEINFO sInfo;
::ZeroMemory(&sInfo, sizeof(BROWSEINFO));
sInfo.pidlRoot = 0;
sInfo.lpszTitle = _T("请选择文件夹");
sInfo.ulFlags = BIF_RETURNONLYFSDIRS | BIF_EDITBOX;
sInfo.lpfn = BrowseCallbackProc; // callback
// 显示文件夹选择对话框
LPITEMIDLIST lpidlBrowse = ::SHBrowseForFolder(&sInfo);
if (lpidlBrowse != NULL)
{
// 取得文件夹名
if (::SHGetPathFromIDList(lpidlBrowse, szFolderPath))
{
strFolderPath = szFolderPath;
}
::CoTaskMemFree(lpidlBrowse); // 释放内存
}
TRACE(strFolderPath);
return strFolderPath;
}