提供一个对话框供用户选择一个文件夹路径。
来源:互联网 发布:600756 浪潮软件 编辑:程序博客网 时间:2024/06/05 00:07
版权声明:本文为博主原创文章,未经博主允许不得转载。
目录(?)[+]
1,目的
提供一个对话框供用户选择一个文件夹路径。
2,原理&实现
先贴上这个工具类的源码:
在你的程序中使用静态方法 CSelectFolderDlg::Show() 就能显示一个选择文件夹的对话框啦,返回的CString就是所选文件夹路径。
- /*
- 文件:SelectFolderDlg.h
- 说明:提供一个选择文件夹的对话框
- */
- #ifndef SELECT_FOLDER_DLG_H
- #define SELECT_FOLDER_DLG_H
- #ifndef BIF_NEWDIALOGSTYLE
- #define BIF_NEWDIALOGSTYLE 0x0040
- #endif
- class CSelectFolderDlg
- {
- public:
- //创建一个选择文件夹的对话框,返回所选路径
- static CString Show()
- {
- TCHAR szFolderPath[MAX_PATH] = {0};
- CString strFolderPath = TEXT("");
- BROWSEINFO sInfo;
- ::ZeroMemory(&sInfo, sizeof(BROWSEINFO));
- sInfo.pidlRoot = 0;
- sInfo.lpszTitle = _T("请选择一个文件夹:");
- sInfo.ulFlags = BIF_DONTGOBELOWDOMAIN | BIF_RETURNONLYFSDIRS | BIF_NEWDIALOGSTYLE | BIF_EDITBOX;
- sInfo.lpfn = NULL;
- // 显示文件夹选择对话框
- LPITEMIDLIST lpidlBrowse = ::SHBrowseForFolder(&sInfo);
- if (lpidlBrowse != NULL)
- {
- // 取得文件夹名
- if (::SHGetPathFromIDList(lpidlBrowse,szFolderPath))
- {
- strFolderPath = szFolderPath;
- }
- }
- if(lpidlBrowse != NULL)
- {
- ::CoTaskMemFree(lpidlBrowse);
- }
- return strFolderPath;
- }
- };
- #endif
简单说明下,
有个API可显示一个浏览文件夹的对话框,形式为:
LPITEMIDLIST WINAPI SHBrowseForFolder( LPBROWSEINFO lpbi);
参数就一个,这个结构定义:
- typedef struct _browseinfo {
- HWND hwndOwner; // 父窗口句柄
- LPCITEMIDLIST pidlRoot; // 要显示的文件目录对话框的根(Root)
- LPTSTR pszDisplayName; // 保存被选取的文件夹路径的缓冲区
- LPCTSTR lpszTitle; // 显示位于对话框左上部的标题
- UINT ulFlags; // 指定对话框的外观和功能的标志
- BFFCALLBACK lpfn; // 处理事件的回调函数
- LPARAM lParam; // 应用程序传给回调函数的参数
- int iImage; // 文件夹对话框的图片索引
- } BROWSEINFO, *PBROWSEINFO, *LPBROWSEINFO
使用函数前我们建一个这个结构,填一些内容,可以对要显示的对话框做些配置:
- BROWSEINFO sInfo;
- ::ZeroMemory(&sInfo, sizeof(BROWSEINFO));
- sInfo.pidlRoot = 0;
- sInfo.lpszTitle = _T("请选择一个文件夹:");
- sInfo.ulFlags = BIF_DONTGOBELOWDOMAIN | BIF_RETURNONLYFSDIRS | BIF_NEWDIALOGSTYLE | BIF_EDITBOX;
- sInfo.lpfn = NULL;
这里设置了对话框显示的目录树根目录、标题、风格等。
现在就可以用它来显示一个“请选择一个文件夹”对话框了:
- // 显示文件夹选择对话框
- LPITEMIDLIST lpidlBrowse = ::SHBrowseForFolder(&sInfo);
- TCHAR szFolderPath[MAX_PATH] = {0};
- ::SHGetPathFromIDList(lpidlBrowse,szFolderPath);
3,效果
4,源码
vs2008工程下载:
http://yun.baidu.com/s/1i3wVm3z
- <pre code_snippet_id="121664" snippet_file_name="blog_20131221_3_3217985"></pre>
- <pre></pre>
- <pre></pre>
- <pre></pre>
- <pre></pre>
0 0
- 提供一个对话框供用户选择一个文件夹路径。
- 如何弹出一个选择文件夹路径的对话框选择路径?
- 打开对话框--选择一个文件夹
- MFC 选择一个文件夹路径
- MFC选择一个文件夹路径以及选择一个文件路径
- MFC下面弹出一个选择文件夹对话框
- 弹出对话框,选择一个文件夹,返回文件夹path
- 【MFC】按钮选择一个文件夹,获得文件夹中文件路径!
- MFC选择文件夹对话框,选择文件路径
- 在VC中做一个选择文件夹的对话框
- 在VC中做一个选择文件夹的对话框
- 在VC中做一个选择文件夹的对话框 (转载)
- VC选择文件夹路径对话框 - SHBrowseForFolder 函数
- Vb2010 弹出对话框来选择文件夹路径
- 调用系统对话框,选择指定文件夹路径
- 显示“选择文件夹”对话框,让用户选择文件夹
- VC弹出选择“文件路径”和选择“文件夹路径”对话框
- 遍历用户提供文件夹下的所有文件夹路径
- android studio设置窗口颜色和字体
- C#中yield return用法分析
- HTML 学习 (一)
- C++纯虚函数
- Mac OS X Git安装教程
- 提供一个对话框供用户选择一个文件夹路径。
- Android中ListView数据使用sAdapter.notifyDataSetChanged();方法不刷新的问题
- 自定义view(一)
- linux 中 kill() 与 signal() 函数
- win7 右键卡死
- [Maven实战]发布maven项目到中央仓库(Central Repository)
- EJB 是怎样通过Resteasy进行验证的
- session和cookie机制
- 自定义简单的Toast,可自行修改文字、图片、样式