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

转自: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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
VC是Visual C++的缩写,是一种基于C++语言的集成开发环境。在VC中,可以使用.NET框架来实现对话框的设计和交互。 在VC中,我们可以通过创建一个Windows Forms应用程序来实现对话框的输入功能。首先,我们需要在应用程序中添加一个对话框控件。我们可以使用.NET提供的控件工具箱中的对话框控件进行添加。然后,我们可以在对话框控件上添加文本框等输入控件,以便用户可以在对话框中输入内容。 接下来,我们需要对输入的内容进行处理。我们可以通过编写事件处理函数来实现对输入内容的处理。例如,对于文本框,我们可以编写一个事件处理函数,当用户在文本框中输入内容并按下回车键时触发。在事件处理函数中,我们可以获取用户输入的内容并进行相应的处理,例如保存到数据库或进行计算等。 除了直接在对话框中输入内容外,我们还可以通过使用控件间的数据绑定来实现对话框的输入功能。例如,我们可以将网格视图和表单视图进行数据绑定,用户在网格视图中选择一条记录后,对应的数据会显示在表单视图中,用户可以在表单视图中进行修改和输入。通过数据绑定,我们可以更加方便地实现对话框的输入功能。 总之,VC中的.NET输入对话框是通过添加对话框控件和相应的输入控件,编写事件处理函数来实现用户输入内容的功能。我们可以根据具体的需求选择合适的方式来实现对话框的输入功能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值