----在安裝軟件等一些操作中,需要用戶指定安裝路徑,現在軟件的安裝界面都是非常友好的,一般來說給出一個缺省路徑,用戶如不滿意可以在文件夾列表中選擇其他的路徑。在WIN9X下,一般不再采用原來的先在驅動器列表框中選擇驅動器再在相應的驅動器中選擇相應文件夾的界面,而是采用的類似資源管理器中“所有文件夾”界面:最上層是“桌面”,然後是“我的電腦”、驅動器A、C、D...等,在一個列表框中用戶可實現浏覽所有驅動器及文件夾的操作。這種特色的文件列表沒有現成的控件可供使用,但利用API函數可方便地實現。
----實現方法:API函數SHBrowseForFolder可以提供這樣的文件列表,它需要用到一個BROWSEINFO類型,此類型包括了列表框使用的參數,此類型的聲明見下面的程序,其中這裡用到的幾個參數簡單說明一下:
----hwndOwner—當前窗口的句柄。
----pidlRoot—從何根路徑開始展開文件夾,缺省情況下從“桌面”開始展開。
----lpszTitle—目錄樹上方的標題,用來給用戶一些提示信息。
----ulFlags—顯示標志控制項:比如若賦值為BIF_BROWSEFORCOMPUTER,則只有當用戶選擇“我的電腦”時“確定”按鈕才有效,這裡我們需要的是
----BIF_RETURNONLYFSDIRS,只有用戶選擇的是文件夾時“確定”按鈕才有效。
----此函數返回值是指向項目(ITEM)的一個指針,有了這個數值,再用API函數SHGetPathFromIDList可以獲得具體的路徑,如果用戶按的是“取消”按鈕,則返回值為NULL。
----下面是一個例子,在窗體中放置一個命令按鈕command1、一個文本框Text1,在窗體的聲明部分API聲明函數和類型及常量如下:
OptionExplicit
PrivateTypeBROWSEINFO
hOwnerAsLong
pidlRootAsLong
pszDisplayNameAsString
lpszTitleAsString
ulFlagsAsLong
lpfnAsLong
lParamAsLong
iImageAsLong
EndType
ConstBIF_RETURNONLYFSDIRS=&H1
PrivatepidlAsLong
PrivateDeclareFunction
SHGetPathFromIDList_
Lib"shell32.dll"Alias
"SHGetPathFromIDListA"_
(ByValpidlAsLong,ByVal
pszPathAsString)AsLong
PrivateDeclareFunction
SHBrowseForFolderLib"shell32.dll"_
Alias"SHBrowseForFolderA"_
(lpBrowseInfoAsBROWSEINFO)AsLong
----雙擊命令按鈕,寫如下代碼:
PrivateSubcommand1_Click()
DimbiAsBROWSEINFO
DimrAsLong
DimpidlAsLong
DimpathAsString
DimposAsInteger
'句柄
bi.hOwner=Me.hWnd
'展開根目錄
bi.pidlRoot=0&
'列表框標題
bi.lpszTitle="請選擇軟件安裝路徑:"
'規定只能選擇文件夾,其他無效
bi.ulFlags=BIF_RETURNONLYFSDIRS
'調用API函數顯示列表框
pidl=SHBrowseForFolder(bi)
'利用API函數獲取返回的路徑
path=Space$(512)
r=SHGetPathFromIDList(ByValpidl&,ByValpath)
IfrThen
pos=InStr(path,Chr$(0))
Text1=Left(path,pos-1)
Else:Text1=""
EndIf
EndSub
----運行此程序,單擊命令按鈕,就可以看到和資源管理器中一樣的“所有文件夾”列表了。
----此程序在中文WIN95/98、中文VB5.0專業版下調試通過,也適用於VB4.0。->