关于VC弹出选择文件夹对话框

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

转自:http://blog.csdn.net/wangyao1052/article/details/6652077


VC编程中经常需要弹出选择文件夹对话框供用户选择目标文件夹

基本实现的源码如下

[cpp]  view plain copy
  1. void CTestDlg::OnBtnTest()   
  2. {  
  3.     // TODO: Add your control notification handler code here  
  4.     TCHAR pszPath[MAX_PATH];  
  5.     BROWSEINFO bi;   
  6.     bi.hwndOwner      = this->GetSafeHwnd();  
  7.     bi.pidlRoot       = NULL;  
  8.     bi.pszDisplayName = NULL;   
  9.     bi.lpszTitle      = TEXT("请选择文件夹");   
  10.     bi.ulFlags        = BIF_RETURNONLYFSDIRS | BIF_STATUSTEXT;  
  11.     bi.lpfn           = NULL;   
  12.     bi.lParam         = 0;  
  13.     bi.iImage         = 0;   
  14.   
  15.     LPITEMIDLIST pidl = SHBrowseForFolder(&bi);  
  16.     if (pidl == NULL)  
  17.     {  
  18.         return;  
  19.     }  
  20.   
  21.     if (SHGetPathFromIDList(pidl, pszPath))  
  22.     {  
  23.         AfxMessageBox(pszPath);  
  24.     }  
  25. }  

这一般均能够满足要求,但有时还是需要在此基础上增强一些功能。

比如在弹出选择文件夹对话框时选中默认的文件夹,或在STATUSTEXT区域显示一些信息等等。这需要在BrowseCallbackProc回调函数中实现。具体实现的源码如下:

(具体BrowseCallBackFun回调函数的用法请参照MSDN)

[cpp]  view plain copy
  1. //选择文件夹对话框回调函数  
  2. int CALLBACK BrowseCallBackFun(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData)  
  3. {  
  4.     switch(uMsg)  
  5.     {  
  6.     case BFFM_INITIALIZED:  //选择文件夹对话框初始化  
  7.         //设置默认路径为lpData即'D:\'  
  8.         ::SendMessage(hwnd, BFFM_SETSELECTION, TRUE, lpData);  
  9.         //在STATUSTEXT区域显示当前路径  
  10.         ::SendMessage(hwnd, BFFM_SETSTATUSTEXT, 0, lpData);  
  11.         //设置选择文件夹对话框的标题  
  12.         ::SetWindowText(hwnd, TEXT("请先设置个工作目录"));   
  13.         break;  
  14.     case BFFM_SELCHANGED:   //选择文件夹变更时  
  15.         {  
  16.             TCHAR pszPath[MAX_PATH];  
  17.             //获取当前选择路径  
  18.             SHGetPathFromIDList((LPCITEMIDLIST)lParam, pszPath);  
  19.             //在STATUSTEXT区域显示当前路径  
  20.             ::SendMessage(hwnd, BFFM_SETSTATUSTEXT, TRUE, (LPARAM)pszPath);  
  21.         }  
  22.         break;  
  23.     }  
  24.     return 0;  
  25. }  
  26.   
  27.   
  28. void CTestDlg::OnBtnTest()   
  29. {  
  30.     // TODO: Add your control notification handler code here  
  31.     TCHAR pszPath[MAX_PATH];  
  32.     BROWSEINFO bi;   
  33.     bi.hwndOwner      = this->GetSafeHwnd();  
  34.     bi.pidlRoot       = NULL;  
  35.     bi.pszDisplayName = NULL;   
  36.     bi.lpszTitle      = TEXT("请选择文件夹");   
  37.     bi.ulFlags        = BIF_RETURNONLYFSDIRS | BIF_STATUSTEXT;  
  38.     bi.lpfn           = BrowseCallBackFun;     //回调函数  
  39.     bi.lParam         = (LPARAM)TEXT("D:\\");  //传给回调函数的参数,设置默认路径  
  40.     bi.iImage         = 0;   
  41.       
  42.     LPITEMIDLIST pidl = SHBrowseForFolder(&bi);  
  43.     if (pidl == NULL)  
  44.     {  
  45.         return;  
  46.     }  
  47.       
  48.     if (SHGetPathFromIDList(pidl, pszPath))  
  49.     {  
  50.         AfxMessageBox(pszPath);  
  51.     }  
  52. }  

附图片:


当然也可以设置选择文件对话框的其他样式,比如使其具有新增文件夹的功能,可如下实现

bi.ulFlags        =        BIF_USENEWUI        

附图:(改图来源于www.VCKBASE.com,本人电脑上安装的是VC6,不支持BIF_USENEWUI,请在VC2003+上尝试)


具体请参照MSDN

VC++ 操作文件对话框的使用方法详解(C/C++) 其中一个常见的交互需求是操作文件对话框,通过文件对话框可以让用户选择文件或者指定文件保存的位置。除了以上示例中使用的两种文件对话框外,Windows API还提供了其他类型的对话框,如选择目录对话框、字体选择对话框等。这些函数会弹出一个标准的文件对话框供用户选择文件路径或保存文件路径,并返回用户的选择结果。接下来,我们将介绍两种常见的文件对话框:打开文件对话框和保存文件对话框。函数打开文件对话框,如果用户选择了文件并点击了"确定"按钮,那么。函数打开保存文件对话框,用户选择保存的文件路径后,我们可以通过。 阅读详情

相关推荐

VC++一文带你搞懂如何操作文件对话框(附源码)

本文详细讲述一下C++在操作打开文件对话框、保存文件对话框、浏览文件夹对话框时的相关细节,给大家借鉴和参考。

dvlinker的技术专栏 1万+

visual c++ VC选择文件夹对话框

visual c++ VC选择目录的对话框

VC++ 文件路径选择文件夹打开两种实现方法及示例

本文还有配套的精品资源,点击获取 简介:在VC++编程中,文件路径的选择和特定文件夹的打开是常见的用户交互需求。本教程详细介绍了两种不同的方式实现文件路径选择对话框,包括使用 CFileDialog 类和 OPENFILENAME 结构结合 GetOpenFileName 函数。此外,还讲解了如何使用 IShellItem ...

weixin_42584586的博客 2260

VC++6.0 常用的文件对话框和目录选择对话框

2,文件目录选择对话框

qwestw的专栏 730

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

实现选择文件和选择文件夹不同,选择 文件 比较简单,只需要用一个类即可,实现 文件夹比较复杂  LPMALLOC pMalloc; //先定义一个LPMALLOC 的变量   /* Gets the Shell's default allocator */   if (::SHGetMalloc(&pMalloc) == NOERROR)   {       BROWSEIN

wq1982718的专栏 1418

VC 弹出选择文件夹对话框

    首先创建如下的对话框,并为它创建类Dialog,然后添加一个按钮设置按钮ID为IDC_BTN_VIEW,为按钮添加消息响应函数OnBtnView(),并添加如下代码。 //这个函数可以设置为全局函数//显示文件夹对话框,返回选中文件夹的路径CString BrowseForFolder(HWND hWnd){ TCHAR szTitle[] = _T("Select a fol

wanglei2258的专栏 1200

VC弹出选择文件夹对话框的程序的编写

在实际的MFC编程当中,常常需要弹出对话框选择文件、选择目录等操作,对于选择文件,用CFileDialog就可以很简单的解决,而对于选择目录,则稍稍需要多一些步骤,需要自己创建Dialog。首先创建如下的对话框,并为它创建类Dialog,在Dialog头文件中添加保存目录名的变量CString m_strPath,然后为编辑框右边的按钮添加消息响应函数OnButtonBrowser(),并添加

jiangxinyu的专栏 1369

【转】关于VC弹出选择文件夹对话框

基本实现的源码如下 1 void CTestDlg::OnBtnTest() 2 { 3 // TODO: Add your control notification handler code here 4 TCHAR pszPath[MAX_PATH]; 5 BROWSEINFO bi; 6 bi.hwndO

tinzo的专栏 456

VC弹出"选择文件"和"选择文件夹"对话框(转)

VC弹出"选择文件"和"选择文件夹"对话框(转) 1、选择文件夹    在实际的MFC编程当中,常常需要弹出对话框选择文件、选择目录等操作,对于选择文件,用CFileDialog就可以很简单的解决,而对于选择目录,则稍稍需要多一些步骤,需要自己创建Dialog。    首先创建如下的对话框,并为它创建类Dialog,在Dialog头文件中添加保存目录名的变量CString m_strP

redfox1985的专栏 1457

VC弹出选择文件夹对话框的程序的编写(ZZ)

<br /><br />    在实际的MFC编程当中,常常需要弹出对话框选择文件、选择目录等操作,对于选择文件,用CFileDialog就可以很简单的解决,而对于选择目录,则稍稍需要多一些步骤,需要自己创建Dialog。<br />    首先创建如下的对话框,并为它创建类Dialog,在Dialog头文件中添加保存目录名的变量CString m_strPath,然后为编辑框右边的按钮添加消息响应函数OnButtonBrowser(),并添加如下代码。 <br /> <br />void CDialog:

conanlrj的专栏 676

VC弹出选择“文件路径”和选择文件夹路径”对话框

在实际的MFC编程当中,常常需要弹出对话框选择文件、选择目录等操作,对于选择文件,用CFileDialog就可以很简单的解决,而对于选择目录,则稍稍需要多一些步骤,需要自己创建Dialog。 1、选择文件夹    首先创建如下的对话框,并为它创建类Dialog,在Dialog

http://www.softwareace.cn 王牌软件 1828

VC弹出"选择文件"和"选择文件夹"对话框

VC弹出"选择文件"和"选择文件夹"对话框 1、选择文件夹     在实际的MFC编程当中,常常需要弹出对话框选择文件、选择目录等操作,对于选择文件,用CFileDialog就可以很简单的解决,而对于选择目录,则稍稍需要多一些步骤,需要自己创建Dialog。     首

MOKA 826
上一篇: C++汉字转拼音
下一篇: SQLite(快速上手版)笔记
patdz
博客等级 码龄14年 20粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值