vs2013环境要求比vc6.0严格些。以前的代码不能直接拿来用,做了些修改。有效果图。

打开文件:

[cpp] view plain copy
  1. CString gReadFilePathName;  
  2. CFileDialog fileDlg(true, _T("mp3"), _T("*.mp3"), OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, _T("mp3 Files (*.mp3)|*.mp3|wav File(*.wav)|*.wav|All File (*.*)|*.*||"), NULL);  
  3. if (fileDlg.DoModal() == IDOK)    //弹出对话框  
  4. {  
  5.     gReadFilePathName = fileDlg.GetPathName();//得到完整的文件名和目录名拓展名  
  6.     GetDlgItem(IDC_EDIT1)->SetWindowText(gReadFilePathName);//将路径显示  
  7.     CString filename = fileDlg.GetFileName();  
  8. }  
MFC选择文件和文件夹对话框

打开文件夹:

[cpp] view plain copy
  1. CFileFind finder;  
  2. CString path;  
  3. BOOL fileExist;  
  4.   
  5. // 获取特定文件夹的LPITEMIDLIST,可以将之理解为HANDLE  
  6. // 所谓的特定文件夹,你可以用CSIDL_XXX来检索之。  
  7. LPITEMIDLIST rootLoation;  
  8. SHGetSpecialFolderLocation(NULL, CSIDL_DESKTOP, &rootLoation);  
  9. if (rootLoation == NULL) {  
  10.     // unkown error  
  11.     return;  
  12. }  
  13. // 配置对话框  
  14. BROWSEINFO bi;  
  15. ZeroMemory(&bi, sizeof(bi));  
  16. bi.pidlRoot = rootLoation; // 文件夹对话框之根目录,不指定的话则为我的电脑  
  17. bi.lpszTitle = _T("对话框抬头"); // 可以不指定  
  18. // bi.ulFlags = BIF_EDITBOX | BIF_RETURNONLYFSDIRS;  
  19.   
  20. // 打开对话框, 有点像DoModal  
  21. LPITEMIDLIST targetLocation = SHBrowseForFolder(&bi);  
  22. if (targetLocation != NULL) {  
  23.     TCHAR targetPath[MAX_PATH];  
  24.     SHGetPathFromIDList(targetLocation, targetPath);  
  25.     //MessageBox( targetPath );  
  26.     GetDlgItem(IDC_EDIT1)->SetWindowText(targetPath);//将路径显示  
  27. }  
MFC选择文件和文件夹对话框


出处:http://blog.csdn.net/scu_zhongxq/article/details/5354003

在MFC编程中经常会需要用到选择目录和选择文件的界面,以下总结一下本人常用的这两种对话框的生成方法:

选择目录对话框

MFC选择文件和文件夹对话框//选择目录按钮
MFC选择文件和文件夹对话框
void CDcPackerDlg::OnBnClickedDecgen()    
MFC选择文件和文件夹对话框
{
MFC选择文件和文件夹对话框    
char szPath[MAX_PATH];     //存放选择的目录路径 
MFC选择文件和文件夹对话框
    CString str;
MFC选择文件和文件夹对话框
MFC选择文件和文件夹对话框    ZeroMemory(szPath, 
sizeof(szPath));   
MFC选择文件和文件夹对话框
MFC选择文件和文件夹对话框    BROWSEINFO bi;   
MFC选择文件和文件夹对话框    bi.hwndOwner 
= m_hWnd;   
MFC选择文件和文件夹对话框    bi.pidlRoot 
= NULL;   
MFC选择文件和文件夹对话框    bi.pszDisplayName 
= szPath;   
MFC选择文件和文件夹对话框    bi.lpszTitle 
= "请选择需要打包的目录:";   
MFC选择文件和文件夹对话框    bi.ulFlags 
= 0;   
MFC选择文件和文件夹对话框    bi.lpfn 
= NULL;   
MFC选择文件和文件夹对话框    bi.lParam 
= 0;   
MFC选择文件和文件夹对话框    bi.iImage 
= 0;   
MFC选择文件和文件夹对话框    
//弹出选择目录对话框
MFC选择文件和文件夹对话框
    LPITEMIDLIST lp = SHBrowseForFolder(&bi);   
MFC选择文件和文件夹对话框
MFC选择文件和文件夹对话框    
if(lp && SHGetPathFromIDList(lp, szPath))   
MFC选择文件和文件夹对话框    
{
MFC选择文件和文件夹对话框        str.Format(
"选择的目录为 %s",  szPath);
MFC选择文件和文件夹对话框        AfxMessageBox(str); 
MFC选择文件和文件夹对话框
MFC选择文件和文件夹对话框        MFC选择文件和文件夹对话框
MFC选择文件和文件夹对话框    }

MFC选择文件和文件夹对话框    
else   
MFC选择文件和文件夹对话框        AfxMessageBox(
"无效的目录,请重新选择");   
MFC选择文件和文件夹对话框}



选择文件对话框

MFC选择文件和文件夹对话框CString CDcPackerDlg::BootOpenDialog()   //返回选择的文件名称
MFC选择文件和文件夹对话框
{
MFC选择文件和文件夹对话框    CString strFile 
= _T("");
MFC选择文件和文件夹对话框
MFC选择文件和文件夹对话框    CFileDialog    dlgFile(TRUE, NULL, NULL, OFN_HIDEREADONLY, _T(
"Describe Files (*.cfg)|*.cfg|All Files (*.*)|*.*||"), NULL);
MFC选择文件和文件夹对话框
MFC选择文件和文件夹对话框    
if (dlgFile.DoModal())
MFC选择文件和文件夹对话框    
{
MFC选择文件和文件夹对话框        strFile 
= dlgFile.GetPathName();
MFC选择文件和文件夹对话框    }

MFC选择文件和文件夹对话框
MFC选择文件和文件夹对话框    
return strFile;
MFC选择文件和文件夹对话框}

MFC选择文件和文件夹对话框
MFC选择文件和文件夹对话框
//加载文件按钮
MFC选择文件和文件夹对话框
void CDcPackerDlg::OnBnClickedSelectdec()
MFC选择文件和文件夹对话框
{
MFC选择文件和文件夹对话框    
// TODO: Add your control notification handler code here
MFC选择文件和文件夹对话框
    m_strDescPath = "";        //类的成员变量
MFC选择文件和文件夹对话框
MFC选择文件和文件夹对话框    
//"打开文件"对话框,选择文件,返回其路径
MFC选择文件和文件夹对话框
    m_strDescPath = BootOpenDialog();
MFC选择文件和文件夹对话框
MFC选择文件和文件夹对话框    MFC选择文件和文件夹对话框
MFC选择文件和文件夹对话框}

Windows--MFC选择文件对话框和选择文件夹对话框

选择单个文件对话框:

MFC选择文件和文件夹对话框
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 }
MFC选择文件和文件夹对话框

选择多个文件对话框

MFC选择文件和文件夹对话框
 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 }
MFC选择文件和文件夹对话框

选择文件夹

MFC选择文件和文件夹对话框
 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 }
MFC选择文件和文件夹对话框

 


相关文章: