查看: 192|回复: 2

选择目录的两种方法

[复制链接]
发表于 2016-10-17 16:31:22 | 显示全部楼层 |阅读模式 来自 甘肃
在我们的应用程序中经常需让用户选择目录,如杀毒软件中用户选择处理目录等。这就涉及目录的选择,我们可使用如下方法之一让用户选择目录:
1、使用SHBrowseForFolder和SHGetPathFromIDList函数
函数原形申明如下:
WINSHELLAPI LPITEMIDLIST WINAPI SHBrowseForFolder(LPBROWSEINFO lpbi);
WINSHELLAPI BOOL WINAPI SHGetPathFromIDList(LPCITEMIDLIST pidl, LPSTR pszPath); LPBROWSEINFO和LPITEMIDLIST的结构请参考Win32文档。这种方法选取目录可获得Windows桌面下所有可用的目录,包括网络邻居中其它计算机的共享目录等,但不可新建目录。下面的例程可让用户选择目录,该例程返回指向所选择目录的全路径字符串。
#include
//用WINAPI函数弹出一个选择文件夹对话框
AnsiString SelectFolder(AnsiString Caption)
{
BROWSEINFO bi;      //控制Browse对话框上属性的结构体
     LPITEMIDLIST ItemID;
     char sDir[MAX_PATH];    //MAX_PATH:系统常量,指最大路径长度
     char FolderName[MAX_PATH];
     memset(&bi, 0, sizeof(BROWSEINFO));     //清零
     memset(sDir, 0, MAX_PATH);
     bi.hwndOwner   = Application->Handle;    //父窗口句柄
     bi.pszDisplayName = FolderName;         //存放路径的缓冲区
     bi.lpszTitle   = Caption.c_str();        //对话框标题
     bi.ulFlags    = BIF_RETURNONLYFSDIRS;    //只显示文件系统文件夹
     ItemID = SHBrowseForFolder(&bi);
     if(ItemID==NULL)
         return "";
     SHGetPathFromIDList(ItemID, sDir);
     GlobalFreePtr(ItemID);
     AnsiString PathName=String(sDir);
     if(PathName.IsEmpty())
         return "";
     if(strcmp(PathName.AnsiLastChar(),"\\")!=0)
         PathName+="\\";   //添加路径符
     return PathName;
}
//--------------------------------------------------------------------------
我们可作如下调用得到选择的目录名:
AnsiString DestPathName=SelectFolder("选择导出梯度数据的目的目录");
2、使用SelectDirectory函数。
C++Builder提供的函数SelectDirectory可实现目录名的选择,它显示的是类似“打开”/“保存”的对话框,但其优点是可使用/不使用键盘输入目录名,并允许创建新目录,缺点是界面为英文。其原形定义如下:
extern PACKAGE bool __fastcall SelectDirectory(AnsiString &Directory, TSelectDirOpts Options, int HelpCtx);
下面的例程SelectDir允许您选择目录:
#include
AnsiString SelectDir(AnsiString Dir)
{
   if(SelectDirectory(Dir, TSelectDirOpts()
卓航论坛免责声明
Discuz X 最新常见问题解决方案 https://bbs.piaoxian.net/thread-77402-1-1.html (出处: 飘仙建站论坛)
回复

使用道具 举报

发表于 2016-10-19 16:44:13 | 显示全部楼层 来自 上海
有道理。。。
回复 支持 反对

使用道具 举报

发表于 2016-10-21 22:37:55 | 显示全部楼层 来自 澳大利亚
有竞争才有进步嘛
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注公众号

相关侵权、举报、投诉及建议等,请发 E-mail:admin@discuz.vip

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖
关注公众号
QQ客服返回顶部