c++选择文件夹对话框
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);
返回的 LPITEMIDLIST 是Windows Shell 用来唯一标识一个对象的结构,这里用它可以获取我们的路径值:
- 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>
c++选择文件夹对话框的更多相关文章
- Delphi 弹出Windows风格的选择文件夹对话框, 还可以新建文件夹
Delphi 弹出Windows风格的选择文件夹对话框, 还可以新建文件夹 unit Unit2; interface uses Windows, Messages, SysUtils, V ...
- java 选择文件夹对话框
java swing 选择文件夹对话框 import java.io.File; import javax.swing.JFileChooser; public class Test2 { publi ...
- winform 实现选择文件和选择文件夹对话框
//选择文件,点击[浏览],选择文件 private void button1_Click(object sender, EventArgs e) { OpenFileDialog openFileD ...
- NX二次开发-弹出选择文件夹对话框
这个UFUN和NOPEN里没有对应的函数和类,要用C++的方法去做. #include "afxdialogex.h"//弹出选择文件夹对话框头文件 #include " ...
- MFC中打开选择文件夹对话框,并将选中的文件夹地址显示在编辑框中
一般用于选择你要将文件保存到那个目录下,此程序还包含新建文件夹功能 BROWSEINFO bi; ZeroMemory(&bi, sizeof(BROWSEINFO)); //指定存放文件的 ...
- NX二次开发-UFUN打开选择文件夹对话框UF_UI_create_filebox
#include <uf.h> #include <uf_ui.h> #include <string> using namespace std; string O ...
- CodeSmith使用总结--下拉列表和文件夹对话框属性
上一篇有点短了,因为实在没有什么可说的,这一篇会多一点.O(∩_∩)O~ 一.下拉列表 关于如何在CodeSmith中创建一个下拉列表的属性框其实很简单,是要使用C#中的枚举就行了,看操作. 首先定义 ...
- VBA文件对话框的应用(VBA打开文件、VBA选择文件、VBA选择文件夹)
在VBA中经常要用到文件对话框来进行打开文件.选择文件或选择文件夹的操作.用Microsoft Office提供的文件对话框比较方便.用法如下Application.FileDialog(fileDi ...
- mfc--弹出文件夹对话框
1. HRESULT CoInitializeEx(void* pvReserved,DWORD dwCoInit) 初始化com组件,传递参数COINIT_APARTMENTTHREADED 2.L ...
随机推荐
- 字段not null属性要放在最后面写,最少在类型后面写
报错:create table test2211(id not null bigint ,age timestamp); 正确写法:create table test2211(id bigint no ...
- docker: useful commands
docker build -t stock_data_repo_instance24 . docker run -v /opt/log:/opt/log -d -it stock_data_repo_ ...
- socket短连接、长连接
通常短连接是这样:连接->传输数据->关闭连接那什么是长连接?一般长连接相对短连接而言的,长连接在传输结束后不关闭连接,而不断的发送包保持连接等待处理下一个数据包. 一般长连接用于少数cl ...
- Java字符编码的转化问题
概述: 我想字符串的编码问题的确会困扰到非常多开发人员.我近期也是被困扰到了. 问题是这种,我们通过二维码扫描来获得二维码中的信息.可是.我们的二维码的产生过程却是"多样化"的.即 ...
- 【JavaScript】JS读取XML文件并进行搜索
需求效果 点击链接.当前页面载入xml文件并展示相应内容 通过搜索框.搜索xml文件内节点数据.展示包括内容的节点数据 功能实现 Demo终于实现效果 http://loadxmldemo.coder ...
- TTS-零基础入门-10分钟教你做一个语音功能
在本片博客正式開始之前,大家先跟我做一个简单的好玩的 小语音. 新建一个文本文档,然后再文档里输入这样 一句话 CreateObject("SAPI.SpVoice").Spea ...
- oracle 存储过程使用动态sql
Oracle存储过程使用动态SQL 有两种写法:用 DBMS_SQL 或 execute immediate,建议使用后者. DDL和DML (注意DDL中可以用拼接字符串的方法用来create ta ...
- VS2010 使用TeeChart绘图控件 - 之二 - 绘制图形(折线图,柱状图)
1.前期准备 具体可见VS2010 使用TeeChart绘图控件 - 之一 控件和类的导入 1. 1 添加TeeChart控件,给控件添加变量m_TeeChart 添加TeeChart控件,右击控件, ...
- 【POJ 2689】 Prime Distance
[题目链接] http://poj.org/problem?id=2689 [算法] 我们知道,一个在区间[l,r]中的合数的最小质因子必然不超过sqrt(r) 那么,先暴力筛出1-50000中的质数 ...
- Scala 是一门怎样的语言,具有哪些优缺点?
保罗·格雷厄姆在<黑客与画家>中写道,Java属于B&D(捆绑与束缚)类型的语言.为何束缚手脚?因为要让新手和明星程序员写出类似质量的代 码,尽可能的抹消人的才华对程序的影响.不同 ...