65.9K
CodeProject 正在变化。 阅读更多。
Home

CBrowseFolderDialog 类

starIconstarIconstarIconstarIconemptyStarIcon

4.00/5 (5投票s)

2009年4月16日

CPOL

1分钟阅读

viewsIcon

29617

downloadIcon

557

一个简单的“浏览文件夹”对话框功能实现。

sample1

引言

几乎每次开发应用程序时,我都需要“浏览文件夹”对话框的功能。但每次使用它时,我都需要分配和初始化 BROWSEINFO 结构,并调用 SHGetMalloc()SHGetFolderLocation()SHGetPathFromIDList() 等。

显然,这段代码需要被重复很多次。为了避免这种重复,我创建了一个类,将所有上述代码封装在其中。

Using the Code

如果你想使用它,需要做的事情

  1. 下载源代码并将其添加到你的项目中。
  2. 创建一个 CBrowseFolderDialog 实例。
  3. 调用 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日:文章已更新。
© . All rights reserved.