程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 選擇目錄的兩種方法

選擇目錄的兩種方法

編輯:關於C++

在我們的應用程序中經常需讓用戶選擇目錄,如殺毒軟件中用戶選擇處理目錄等。這就涉及目錄的選擇,我們可使用如下方法之一讓用戶選擇目錄:

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 "";
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved