在MFC中实现“浏览文件夹”功能

假设是对标号为ID_BTN_BRS的响应,那么这个消息响应函数可能会是这样子:

 

[cpp] view plaincopyprint?在CODE上查看代码片派生到我的代码片

  1. void CXXClass::OnBottonBrows(void)  
  2. {   
  3.     //选择文件夹  
  4.     char szSelDir[MAX_PATH+1];  
  5.     memset(szSelDir,0,MAX_PATH+1);  
  6.   
  7.     BROWSEINFO bi;   
  8.     memset(&bi,0,sizeof(BROWSEINFO));   
  9.     bi.hwndOwner=GetSafeHwnd();   //or NULL  
  10.     bi.pszDisplayName=NULL;   
  11.     bi.lpszTitle="请选择图片所在目录";  
  12.     bi.ulFlags=BIF_RETURNONLYFSDIRS;  /or ...  
  13.   
  14.     LPITEMIDLIST ItemID;   
  15.     ItemID=SHBrowseForFolder(&bi);      
  16.     if(ItemID)   
  17.     {   
  18.         SHGetPathFromIDList(ItemID,szSelDir);    
  19.         GlobalFree(ItemID);   !!!  
  20.     }   
  21.     else return;  
  22.   
  23.     CString strDir;  
  24.     strDir=szSelDir;  
  25.   
  26.     ///寻找选定文件夹下的图片文件  
  27.     strNameList.clear();   // 已定义vector<CString> strNameList;  
  28.   
  29.     WIN32_FIND_DATA fd;  
  30.     HANDLE hf;  
  31.     hf=FindFirstFile(strDir+"\\*.*",&fd);  
  32.   
  33.     if(hf==INVALID_HANDLE_VALUE)    
  34.     {  
  35.         //.....  
  36.         return;  
  37.     }  
  38.   
  39.     do  
  40.     {  
  41.         //非文件夹并且是合法的文件类型(根据扩展名判断其类型)  
  42.         if((!(fd.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY))&&  
  43.             xIsSuppImageType(fd.cFileName))  
  44.           strNameList.push_back(strDir+"\\"+fd.cFileName);  
  45.   
  46.     }while(FindNextFile(hf,&fd));  
  47.   
  48.     FindClose(hf);  
  49.   
  50.     nNum=strNameList.size();  
  51.     if(nNum==0)  
  52.     {  
  53.         //....  
  54.         return;  
  55.     }  
  56.     //...  
  57. }  

 

 

 

如果只是打开或者浏览文件,比如打开avi格式视频文件,可以

 

 

 

 

[cpp] view plaincopyprint?在CODE上查看代码片派生到我的代码片

  1. char *f="视频文件(合适尺寸,低帧率,avi格式)|*avi||";  
  2.   
  3. CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT|OFN_FILEMUSTEXIST,f,NULL,0,TRUE);  
  4. dlg.m_ofn.lpstrTitle="打开视频"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值