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

windows 专栏收录该内容
41 篇文章 0 订阅

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. }  


打开文件夹:

[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. }  


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

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

选择目录对话框

// 选择目录按钮
void  CDcPackerDlg::OnBnClickedDecgen()    
{
    
char szPath[MAX_PATH];     //存放选择的目录路径 
    CString str;

    ZeroMemory(szPath, 
sizeof(szPath));   

    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);   

    
if(lp && SHGetPathFromIDList(lp, szPath))   
    
{
        str.Format(
"选择的目录为 %s",  szPath);
        AfxMessageBox(str); 

        
    }

    
else   
        AfxMessageBox(
"无效的目录,请重新选择");   
}



选择文件对话框

CString CDcPackerDlg::BootOpenDialog()    // 返回选择的文件名称
{
    CString strFile 
= _T("");

    CFileDialog    dlgFile(TRUE, NULL, NULL, OFN_HIDEREADONLY, _T(
"Describe Files (*.cfg)|*.cfg|All Files (*.*)|*.*||"), NULL);

    
if (dlgFile.DoModal())
    
{
        strFile 
= dlgFile.GetPathName();
    }


    
return strFile;
}


// 加载文件按钮
void  CDcPackerDlg::OnBnClickedSelectdec()
{
    
// TODO: Add your control notification handler code here
    m_strDescPath = "";        //类的成员变量

    
//"打开文件"对话框,选择文件,返回其路径
    m_strDescPath = BootOpenDialog();

    
}

Windows--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 }
复制代码

选择多个文件对话框

复制代码
 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 }
复制代码

 


  • 6
    点赞
  • 2
    评论
  • 36
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值