用API函数实现文件夹列表
实现方法:API函数SHBrowseForFolder可以提供这样的文件列表,它需要用到一个BROWSEINFO类型,此类型包括了列表框使用的参数,此类型的声明见下面的程序,其中这里用到的几个参数简单说明一下:
hwndOwner—当前窗口的句柄。
pidlRoot—从何根路径开始展开文件夹,缺省情况下从“桌面”开始展开。
lpszTitle—目录树上方的标题,用来给用户一些提示信息。
ulFlags—显示标志控制项:比如若赋值为BIF_BROWSEFORCOMPUTER,则只有当用户选择“我的电脑”时“确定”按钮才有效,这里我们需要的是
BIF_RETURNONLYFSDIRS,只有用户选择的是文件夹时“确定”按钮才有效。
此函数返回值是指向项目(ITEM)的一个指针,有了这个数值,再用API函数SHGetPathFromIDList可以获得具体的路径,如果用户按的是“取消”按钮,则返回值为NULL。
下面是一个例子,在窗体中放置一个命令按钮command1、一个文本框Text1,在窗体的声明部分API声明函数和类型及常量如下:
Option Explicit Private Type BROWSEINFO Const BIF_RETURNONLYFSDIRS = &H1 Private pidl As Long Private Declare Function Private Declare Function |
双击命令按钮,写如下代码:
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专业版下调试通过。