利用 WIN32API 函数实现系统文件夹列表
馨亿
我们在编程中,有时需要用户指定文件夹路径,在 VFP 中我们往往会用 GETDIR()来供用
户选择,但 GETDIR()提供的文件夹列表是"选择驱动器再在相应的驱动器中选择相应文
件
夹的界面", 而目前我们常见的是采用类似资源管理器中"所有文件夹"界面: 最上层
是"桌面",然后是"我的电脑"、驱动器 A、C、D...等。
也许有人会问,是不是又在介绍.OCX 控件?如果不是在 VFP 中能实现这样的文件夹
列表吗?
要实现这样的文件夹列表,我们得先了解三个 WIN32API 函数:
1、FindWindow &&获取窗口句柄
2、SHBrowseForFolder &&显示文件夹夹列表窗
3、SHGetPathFromIDList &&获取用户选择的文件夹名
☆FindWindow 这个 API 函数不用介绍了吧,在如何防止程序重复运行中介绍过。
☆SHBrowseForFolder 函数是实现文件夹列表功能的关键,在 API 帮助里是这样写的:
Displays a dialog box that enables the user to select a shell folder.
WINSHELLAPI LPITEmidLIST WINAPI SHBrowseForFolder(LPBROWSEINFO
lpbi)
typedef struct _browseinfo {
HWND hwndOwner; // see below
LPCITEmidLIST pidlRoot; // see below
LPSTR pszDisplayName; // see below
LPCSTR lpszTitle; // see below
UINT ulFlags; // see below
BFFCALLBACK lpfn; // see below
LPARAM lParam; // see below
int iImage; // see below
} BROWSEINFO, *PBROWSEINFO, *LPBROWSEINFO;
或许您注意到了在这个函数里用到了一个 BROWSEINFO 类型,此类型包含了列表框使
用的一些参数,比如:当前窗口句柄(hwndOwner)、从何根路径开始展开文件夹
(pidlRoot)、