在裝設軟體等一些操作中,需要用戶指定裝設路徑,現在軟體的裝設介面都是非常友好的,一般來說給出一個缺省路徑,用戶如不滿意可以在文件夾清單中選擇其他的路徑。在WIN9X下,一般不再採用原來的先在驅動器列示方塊中選擇驅動器再在相應的驅動器中選擇相應文件夾的介面,而是採用的類似檔案總管中“所有文件夾”介面:最上層是“桌面”,然後是“我的電腦”、驅動器A、C、D...等,在一個列示方塊中用戶可實現瀏覽所有驅動器及文件夾的操作。這種特色的文件清單沒有現成的控件可供使用,但利用API函數可方便地實現。
實現方法:API函數SHBrowseForFolder可以提供這樣的文件清單,它需要用到一個BROWSEINFO類型,此類型包括了列示方塊使用的參數,此類型的聲明見下面的程式,其中這裡用到的幾個參數簡單說明一下:
hwndOwner-目前窗口的句柄。
pidlRoot-從何根路徑開始展開文件夾,缺省情況下從“桌面”開始展開。
lpszTitle-目錄樹上方的標題,用來給用戶一些提示資訊。
ulFlags-顯示標志控制項:比如若賦值為BIF_BROWSEFORCOMPUTER,則只有當用戶選擇“我的電腦”時“確定”按鈕才有效,這裡我們需要的是
BIF_RETURNONLYFSDIRS,只有用戶選擇的是文件夾時“確定”按鈕才有效。
此函數返回值是指向項目(ITEM)的一個指針,有了這個數值,再用API函數SHGetPathFromIDList可以穫得具體的路徑,如果用戶按的是“取消”按鈕,則返回值為NULL。
下面是一個例子,在窗體中放置一個命令按鈕command1、一個文字方塊Text1,在窗體的聲明部分API聲明函數和類型及常量如下:
|
Option Explicit
Private Type BROWSEINFO hOwner As Long pidlRoot As Long pszDisplayName As String lpszTitle As String ulFlags As Long lpfn As Long lParam As Long iImage As Long End Type
Const BIF_RETURNONLYFSDIRS = &H1
Private pidl As Long
Private Declare Function SHGetPathFromIDList _ Lib "shell32.dll" Alias "SHGetPathFromIDListA" _ (ByVal pidl As Long, ByVal pszPath As String) As Long
Private Declare Function SHBrowseForFolder Lib "shell32.dll" _ Alias "SHBrowseForFolderA" _ (lpBrowseInfo As BROWSEINFO) As Long
|
連續按兩下命令按鈕,寫如下代碼:
Private Sub command1_Click() Dim bi As BROWSEINFO Dim r As Long Dim pidl As Long Dim path As String Dim pos As Integer |
句柄
bi.hOwner = Me.hWnd
展開根目錄
bi.pidlRoot = 0&
列示方塊標題
bi.lpszTitle = "請選擇軟體裝設路徑:"
規定只能選擇文件夾,其他無效
| bi.ulFlags = BIF_RETURNONLYFSDIRS |
調用API函數顯示列示方塊
| pidl = SHBrowseForFolder(bi) |
利用API函數穫取返回的路徑
path = Space$(512) r = SHGetPathFromIDList(ByVal pidl&, ByVal path) If r Then pos = InStr(path, Chr$(0)) Text1 = Left(path, pos - 1) Else: Text1 = "" End If End Sub |
運行此程式,按一下命令按鈕,就可以看到和檔案總管中一樣的“所有文件夾”清單了。
此程式在中文WIN95/98、中文VB6.0專業版下調試透過。
文章定位: