CBrowseFolderDialog 类





4.00/5 (5投票s)
一个简单的“浏览文件夹”对话框功能实现。
引言
几乎每次开发应用程序时,我都需要“浏览文件夹”对话框的功能。但每次使用它时,我都需要分配和初始化 BROWSEINFO
结构,并调用 SHGetMalloc()
、SHGetFolderLocation()
、SHGetPathFromIDList()
等。
显然,这段代码需要被重复很多次。为了避免这种重复,我创建了一个类,将所有上述代码封装在其中。
Using the Code
如果你想使用它,需要做的事情
- 下载源代码并将其添加到你的项目中。
- 创建一个
CBrowseFolderDialog
实例。 - 调用
CBrowseFolderDialog::BrowseFolder()
成员函数,该函数创建一个对话框并返回所选路径。函数声明如下:
PCTSTR BrowseFolder(HWND hwndOwner = NULL, // parent window handle
PCTSTR pTitle = NULL, // text that will be shown in the top of dialog
int nCSIDL = 0, // here you can specify initial folder CSIDL
LPARAM lParam = NULL, // here you can specify initial folder path
UINT uFlags = BIF_NEWDIALOGSTYLE, // dialog flags
BFFCALLBACK callbackProc = NULL // callback procedure,
// use NULL if you will not provide it);
如你所见,所有参数都有默认值。以下是一些在代码中使用 CBrowseFolderDialog
的示例:
CBrowseFolderDialog dlg;
// example 1:
CString strFolderPath = dlg.BrowseFolder();
// example 2:
strFolderPath = dlg.BrowseFolder(NULL, TEXT("SELECT FOLDER!"));
// example 3: specifying initial folder CSIDL
strFolderPath = dlg.BrowseFolder(CSIDL_DESKTOP);
// example 4: specifying initial folder Path
strFolder = dlg.BrowseFolder(NULL, NULL, NULL, (LPARAM)_T("C:\\"));
// example 5: specifying your own browse
// callback procedure as 6-th parameter
static int CALLBACK BrowseCallbackProc(HWND hwnd, UINT uMsg,
LPARAM lParam, LPARAM lpData)
{
// some implementation
return 0;
}
strFolder = dlg.BrowseFolder(NULL, NULL, NULL, NULL,
NULL, BrowseCallbackProc);
我需要稍微解释一下第五个参数。它是 BROWSEINFO
标志,并在 MSDN 上详细说明。默认值为 BIF_NEWDIALOGSTYLE
。如果你想要不同的行为,请在此处指定你自己的标志组合。
历史
- 2009年4月16日:初始发布。
- 2009年4月17日:文章已更新。