如何打开磁盘目录对话框(BrowseForFolder)
2016-05-04 10:52
330 查看
打开文件对话框相信很多人都已经懂了,那么如何通过打开对话框选择路径呢?这里就要介绍几个函数和结构体.
代码如下:
//文件夹信息结构 typedef struct _browseinfo { HWND hwndOwner; //弹出目录对话框的父窗口 LPCITEMIDLIST pidlRoot;//ITEMIDLIST结构的地址,包含浏览时的初始根目录 //如果设为NULL则桌面目录将被使用 LPTSTR pszDisplayName;//用来保存用户选中的目录字符串的内存地址。该缓冲区的大小缺省是定义的MAX_PATH常量宏。 LPCTSTR lpszTitle;//该浏览文件夹对话框的显示文本,用来提示该浏览文件夹对话框的功能、作用和目的。 UINT ulFlags; //一般设0足以 BFFCALLBACK lpfn;//应用程序定义的浏览对话框 回调函数的地址。当对话框中的事件发生时,该对话框将调用 回调函数。该参数可用为NULL。 LPARAM lParam;//对话框传递给 回调函数的一个参数 指针 int iImage;与选中目录相关的图像。该图像将被指定为系统图像列表中的索引值。 } BROWSEINFO, *PBROWSEINFO, *LPBROWSEINFO;
//存放路径信息结构体 typedef struct _ITEMIDLIST { SHITEMID mkid; } ITEMIDLIST, *LPITEMIDLIST; typedef const ITEMIDLIST* LPCITEMIDLIST;
//显示对话框选择路径 LPITEMIDLIST WINAPI SHBrowseForFolder( LPBROWSEINFO lpbi //指向文件夹信息结构的指针 );
//获取ITEMIDLIST结构指针中的路径信息 WINSHELLAPI BOOL WINAPI SHGetPathFromIDList( LPCITEMIDLIST pidl, LPSTR pszPath );
代码如下:
TCHAR szBrowsePath[MAX_PATH]; ZeroMemory(szBrowsePath, sizeof(szBrowsePath)); BROWSEINFO bi = { 0 }; //因为已经初始化为0.所以有些项不用再重复赋值了 bi.hwndOwner = m_hWnd; bi.pszDisplayName = szBrowsePath; bi.lpszTitle = TEXT("请选择搜索路径:"); LPITEMIDLIST lpiml = { 0 }; lpiml = SHBrowseForFolder(&bi); //如果没有选中目录,则返回NULL if (lpiml && SHGetPathFromIDList(lpiml,szBrowsePath))//从lpiml 中获取路径信息 { m_path = szBrowsePath; UpdateData(FALSE); } else { AfxMessageBox(TEXT("请选择一个路径,或者手动输入!")); }
相关文章推荐
- 程序猿鼓励师的未解之谜
- 终于及格了!
- zzuoj1879: 蛤玮买好了礼物
- 4月29日 例2
- 策略模式 VS 桥梁模式
- 二叉排序树的查找、插入和删除
- 第93课:Spark Streaming updateStateByKey案例实战和内幕源码解密
- android openOrCreateDatabase
- java io的笔记
- 56-Remove Linked List Elements
- Java 数组
- 第3课:SparkStreaming 透彻理解三板斧之三:解密SparkStreaming运行机制和架构进阶之Job和容错
- 编码中几种常见问题分析
- 在windows上安装ubutnu双系统,并且利用easybcd设置开机双启动项 并按照sougou输入法
- 百度地图小试用
- 机器学习十大算法系列(一)——逻辑回归
- init?(coder aDecoder: NSCoder)
- boost::mutex的最简单的例子
- IT十八掌课程体系SPARK知识点总结
- xcode运行到真机报错 图片问题