VS2010/MFC编程入门之十七(对话框:文件对话框)

本文介绍了如何使用CFileDialog实现多文件选择,并演示了如何通过调整缓冲区大小来提高多选性能。此外,还提供了打开特定类型文件(如图片文件)及选择文件夹的具体代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://www.jizhuomi.com/software/173.html


CFileDialog 多选文件

分类: 代码   658人阅读  评论(0)  收藏  举报

[cpp]  view plain copy
  1. void CxxxDlg::OnBnClickedButtonX()  
  2. {  
  3.     // TODO: Add your control notification handler code here  
  4.     CString strFileName;  
  5.     CFileDialog dlg(TRUE, NULL, NULL, OFN_ALLOWMULTISELECT|OFN_FILEMUSTEXIST,   
  6.         "图片文件(*.jpg)|*.jpg|文本文件(*.txt)|*.txt|All(*.*)|*.*|"this);  
  7.       
  8.     // 自定义用于接收文件名的缓冲区的大小。必须重新分配缓冲区,否则无法同时选择太多的文件。  
  9.     CONST DWORD nMaxFile = 1024*1024;  
  10.   
  11.     char* pbFileNameBuf = new char[nMaxFile];  
  12.     if ( NULL == pbFileNameBuf )  
  13.     {  
  14.         return ;  // E_OUTOFMEMORY  
  15.     }  
  16.     memset(pbFileNameBuf, 0, nMaxFile);  
  17.   
  18.     dlg.m_pOFN->lpstrFile = pbFileNameBuf;  
  19.     dlg.m_pOFN->nMaxFile = nMaxFile;  
  20.   
  21.     if ( IDOK == dlg.DoModal() )  
  22.     {  
  23.         POSITION pos = dlg.GetStartPosition();  
  24.         while ( NULL != pos )  
  25.         {  
  26.             strFileName = dlg.GetNextPathName(pos);  
  27.   
  28.             //在调试信息区依次输出所选的每一个文件名  
  29.             OutputDebugString(strFileName);  
  30.             OutputDebugString("/r/n");  
  31.         }  
  32.     }  
  33.   
  34.     if ( NULL != pbFileNameBuf )  
  35.     {  
  36.         delete[] pbFileNameBuf;  
  37.         pbFileNameBuf = NULL;  
  38.     }  
  39. }  


CFileDialog打开文件或文件夹操作  

2010-08-06 09:13:22|  分类: MFC|字号 订阅

// 打开文件

CFileDialog fileDialog = CFileDialog(FALSE, NULL, NULL, OFN_READONLY,
  L"GIF Files (*.gif)|*.gif|All Files (*.*)|*.*||",this);
 if (fileDialog.DoModal() == IDOK)
 {
  CString strPath = fileDialog.GetPathName();
 }

// 打开文件夹

WCHAR szDir[MAX_PATH]; 
 BROWSEINFO bi; 
 ITEMIDLIST *pidl;

 bi.hwndOwner = this->m_hWnd; 
 bi.pidlRoot = NULL; 
 bi.pszDisplayName = szDir; 
 bi.lpszTitle = L"请选择目录"; 
 bi.ulFlags = BIF_RETURNONLYFSDIRS; 
 bi.lpfn = NULL;
 bi.lParam = 0;
 bi.iImage = 0;

 pidl = SHBrowseForFolder(&bi); 
 if(pidl == NULL) 
  return;

 if(SHGetPathFromIDList(pidl, szDir))
 {

  CString m_strSavePath.Format(L"%s", szDir);

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值