vs2013环境要求比vc6.0严格些。以前的代码不能直接拿来用,做了些修改。有效果图。
打开文件:
- CString gReadFilePathName;
- CFileDialog fileDlg(true, _T("mp3"), _T("*.mp3"), OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, _T("mp3 Files (*.mp3)|*.mp3|wav File(*.wav)|*.wav|All File (*.*)|*.*||"), NULL);
- if (fileDlg.DoModal() == IDOK)
- {
- gReadFilePathName = fileDlg.GetPathName();
- GetDlgItem(IDC_EDIT1)->SetWindowText(gReadFilePathName);
- CString filename = fileDlg.GetFileName();
- }
打开文件夹:
- CFileFind finder;
- CString path;
- BOOL fileExist;
-
-
-
- LPITEMIDLIST rootLoation;
- SHGetSpecialFolderLocation(NULL, CSIDL_DESKTOP, &rootLoation);
- if (rootLoation == NULL) {
-
- return;
- }
-
- BROWSEINFO bi;
- ZeroMemory(&bi, sizeof(bi));
- bi.pidlRoot = rootLoation;
- bi.lpszTitle = _T("对话框抬头");
-
-
-
- LPITEMIDLIST targetLocation = SHBrowseForFolder(&bi);
- if (targetLocation != NULL) {
- TCHAR targetPath[MAX_PATH];
- SHGetPathFromIDList(targetLocation, targetPath);
-
- GetDlgItem(IDC_EDIT1)->SetWindowText(targetPath);
- }
出处:http://blog.csdn.net/scu_zhongxq/article/details/5354003
在MFC编程中经常会需要用到选择目录和选择文件的界面,以下总结一下本人常用的这两种对话框的生成方法:
选择目录对话框
//
选择目录按钮
void
CDcPackerDlg::OnBnClickedDecgen()
{
char szPath[MAX_PATH]; //存放选择的目录路径
CString str;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
ZeroMemory(szPath, sizeof(szPath));
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
BROWSEINFO bi;
bi.hwndOwner = m_hWnd;
bi.pidlRoot = NULL;
bi.pszDisplayName = szPath;
bi.lpszTitle = "请选择需要打包的目录:";
bi.ulFlags = 0;
bi.lpfn = NULL;
bi.lParam = 0;
bi.iImage = 0;
//弹出选择目录对话框
LPITEMIDLIST lp = SHBrowseForFolder(&bi);
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
if(lp && SHGetPathFromIDList(lp, szPath))
{
str.Format("选择的目录为 %s", szPath);
AfxMessageBox(str);
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/dot.gif)
}
else
AfxMessageBox("无效的目录,请重新选择");
}
选择文件对话框
CString CDcPackerDlg::BootOpenDialog()
//
返回选择的文件名称
{
CString strFile = _T("");
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
CFileDialog dlgFile(TRUE, NULL, NULL, OFN_HIDEREADONLY, _T("Describe Files (*.cfg)|*.cfg|All Files (*.*)|*.*||"), NULL);
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
if (dlgFile.DoModal())
{
strFile = dlgFile.GetPathName();
}
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
return strFile;
}
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
//
加载文件按钮
void
CDcPackerDlg::OnBnClickedSelectdec()
{
// TODO: Add your control notification handler code here
m_strDescPath = ""; //类的成员变量
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
//"打开文件"对话框,选择文件,返回其路径
m_strDescPath = BootOpenDialog();
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/dot.gif)
}
选择单个文件对话框:
1 CString strFile = _T("");
2
3 CFileDialog dlgFile(TRUE, NULL, NULL, OFN_HIDEREADONLY, _T("Describe Files (*.jpg)|*.jpg|All Files (*.*)|*.*||"), NULL);
4
5 if (dlgFile.DoModal())
6 {
7 strFile = dlgFile.GetPathName();
8 }
选择多个文件对话框
1 void CBugReportDlg::SelectFiles( vector<CString>& all_sel_files )
2 {
3 CFileDialog dlg(TRUE, _T("*.jpg"), NULL, OFN_ALLOWMULTISELECT|OFN_HIDEREADONLY | OFN_FILEMUSTEXIST, _T("Image Files(*.jpg)|*.jpg|"), NULL);
4 dlg.m_ofn.lpstrTitle = _T("选择图片");
5 CString filename;
6 if(dlg.DoModal() == IDOK)
7 {
8 POSITION fileNamesPosition = dlg.GetStartPosition();
9 while(fileNamesPosition != NULL)
10 {
11 filename = dlg.GetNextPathName(fileNamesPosition);
12 all_sel_files.push_back(filename);
13 }
14 }
15
16 }
选择文件夹
1 CString CBugReportDlg::SelFilePath()
2 {
3 TCHAR szFolderPath[MAX_PATH] = {0};
4 CString strFolderPath = TEXT("");
5
6 BROWSEINFO sInfo;
7 ::ZeroMemory(&sInfo, sizeof(BROWSEINFO));
8 sInfo.pidlRoot = 0;
9 sInfo.lpszTitle = _T("请选择处理结果存储路径");
10 sInfo.ulFlags = BIF_RETURNONLYFSDIRS|BIF_EDITBOX|BIF_DONTGOBELOWDOMAIN;
11 sInfo.lpfn = NULL;
12
13 // 显示文件夹选择对话框
14 LPITEMIDLIST lpidlBrowse = ::SHBrowseForFolder(&sInfo);
15 if (lpidlBrowse != NULL)
16 {
17 // 取得文件夹名
18 if (::SHGetPathFromIDList(lpidlBrowse,szFolderPath))
19 {
20 strFolderPath = szFolderPath;
21 }
22 }
23 if(lpidlBrowse != NULL)
24 {
25 ::CoTaskMemFree(lpidlBrowse);
26 }
27
28 return strFolderPath;
29 }