选择目次的两种要领
当前位置:以往代写 > C/C++ 教程 >选择目次的两种要领
2019-06-13

选择目次的两种要领

选择目次的两种要领

在我们的应用措施中常常需让用户选择目次,如杀毒软件顶用户选择处理惩罚目次等。这就涉及目次的选择,我们可利用如下要领之一让用户选择目次:

1、利用SHBrowseForFolder和SHGetPathFromIDList函数

函数原形申明如下:

WINSHELLAPI LPITEMIDLIST WINAPI SHBrowseForFolder(LPBROWSEINFO lpbi);

WINSHELLAPI BOOL WINAPI SHGetPathFromIDList(LPCITEMIDLIST pidl, LPSTR pszPath); LPBROWSEINFO和LPITEMIDLIST的布局请参考Win32文档。这种要领选取目次可得到Windows桌面下所有可用的目次,包罗网络邻人中其它计较机的共享目次等,但不行新建目次。下面的例程可让用户选择目次,该例程返回指向所选择目次的全路径字符串。

#include < shlobj.h >
//用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 < FileCtrl.hpp >
AnsiString SelectDir(AnsiString Dir)
{
   if(SelectDirectory(Dir, TSelectDirOpts() << sdAllowCreate << sdPerformCreate << sdPrompt,0))
     return Dir;
   else return "";
}

    关键字:

在线提交作业