在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="打开视频"
MFC打开文件和文件夹 一、利用API实现打开文件对话框和利用MFC实现打开文件对话框。 方法一:API部分: // OPENFILENAME ofn; // TCHAR szFile[MAX_PATH]; // ZeroMemory(&ofn,sizeof(ofn)); // ofn.lStructSize = sizeof(ofn); // ofn.lpstrFile = szFile; // ofn.lpstrFile[0] = TEXT('/0'); // ofn.nMaxFile = sizeof(szFile); // ofn.lpstrFilter = TEXT("all/0*.*/0jpg/0*.jpg/0bmp/0*.bmp/0"); //定义三个选项,all,text和exe // ofn.nFilterIndex = 1; //定义首选项是哪一个 // ofn.lpstrFileTitle = NULL; // ofn.nMaxFileTitle = 0; // ofn.lpstrInitialDir = NULL; // ofn.Flags = OFN_EXPLORER |OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST; // if(GetOpenFileName(&ofn)) // { // ::SetDlgItemText(this->m_hWnd,IDC_EDIT1,szFile); // } 方法二、MFC实现 // CFileDialog dlg(TRUE, NULL, NULL, // OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, // NULL); // // if(dlg.DoModal() == IDOK) // { // szFilename = dlg.GetPathName(); // ::MessageBox(NULL,szFilename,NULL,MB_OK); // } 注意:打开文件的方式和打开文件夹的方式是不同的。打开文件的方式是不断的打开直到出现末端为文件,否则遇到文件夹还要继续打开。而打开文件夹则是只要选择到一个路径的文件夹就打开。 下面的这种方式是打开文件夹MFC实现。 static TCHAR strDirName[MAX_PATH]; BROWSEINFO bi; CString szString = TEXT("选择一个源文件子文件夹"); bi.hwndOwner = ::GetFocus(); bi.pidlRoot = NULL; bi.pszDisplayName = strDirName; bi.lpszTitle = szString; bi.ulFlags = BIF_BROWSEFORCOMPUTER | BIF_DONTGOBELOWDOMAIN | BIF_RETURNONLYFSDIRS; bi.lpfn = NULL; bi.lParam = 0; bi.iImage = 0; LPITEMIDLIST pItemIDList = ::SHBrowseForFolder(&bi); if(pItemIDList == NULL) { return ; } ::SHGetPathFromIDList(pItemIDList, strDirName); CString str = strDirName; if(str != "" && str.Right(1) != '//') str += '//'; ::SetDlgItemText(this->m_hWnd,IDC_EDIT1,str);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值