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

CXSBrowseFolder – 封装 SHBrowseForFolder 的简单类

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.96/5 (16投票s)

2002 年 5 月 20 日

CPOL

1分钟阅读

viewsIcon

126520

downloadIcon

2530

此类使得使用 shell 函数 SHBrowseForFolder 更加容易。

Sample Image

引言

正如大家可能知道的,shell 函数 SHBrowseForFolder 易于使用,但每次使用时都需要执行一些操作,而这些操作几乎不会改变。一个例子是,在用 SHGetPathFromIDList 查询文件夹/文件路径后,需要释放 shell 返回的 ITEMIDLIST 指针。我的类会为你处理这些问题,并自动为其他参数设置默认值。

以下是从演示应用程序中获取的 CXSBrowseFolder 使用示例

// Create class 
CXSBrowseFolder foo; 

// Use the new style dialog
foo.ModifyStyle(BIF_NEWDIALOGSTYLE, 0);

// Set the dialog's title text
foo.SetTitle("This is the title text. Use CXSBrowseFolder::SetTitle() to set it:");

// Buffer for the returned path
char path[MAX_PATH];

// Display the dalog and check the return code
switch (foo.Show(GetSafeHwnd(), path)) {

    // Success
    case CXSBrowseFolder::RET_OK:
    MessageBox(path, "You Selected", MB_ICONINFORMATION | MB_TOPMOST);
    break;

    // User clicked cancel
    case CXSBrowseFolder::RET_CANCEL:
    MessageBox("Operation cancelled.", "Info", MB_ICONINFORMATION | MB_TOPMOST);
    break;

    // The shell did not return a path for the selection
    case CXSBrowseFolder::RET_NOPATH:
    MessageBox("The shell did not return a path for the selected item!", 
               "Uh Oh", MB_ICONSTOP | MB_TOPMOST);
    break;
}

这个类非常简单,但以下是方法的概述

DWORD CXSBrowseFolder::GetStyle()

描述

  • 返回对话框的当前样式

参数

返回

  • 对话框的当前样式(有关样式信息,请参阅 SHBrowseForFolder 文档)
DWORD CXSBrowseFolder::ModifyStyle(DWORD add, DWORD remove = 0)

描述

  • 添加和/或删除对话框的样式(有关可用样式,请参阅 shell 文档)

参数

  • add:要添加的样式
  • remove(可选):要删除的样式

返回

  • 当前样式(修改后)
void CXSBrowseFolder::SetTitle(LPSTR title)

描述

  • 设置对话框中树视图上显示的文本

参数

  • title:要显示的文本

返回

CXSBrowseFolder::retCode CXSBrowseFolder::Show(HWND parent, LPSTR pathBuffer)

描述

  • 使用当前设置显示文件夹/文件浏览对话框

参数

  • parent:对话框的父窗口的 HWND
  • pathBuffer:将用选定文件/文件夹的路径信息填充的缓冲区

返回

  • CXSBrowseFolder::RET_CANCEL:用户单击了对话框的取消按钮
  • CXSBrowseFolder::RET_NOPATH:shell 没有为所选内容返回有效的路径
  • CXSBrowseFolder::RET_OK:按下了确定按钮,并且 pathBuffer 应该包含有效的路径

这个类不支持自定义对话框,但微软也不建议使用新的对话框样式进行自定义,因为它可调整大小。

好了,这篇文章就到此为止。我希望您觉得这个简单的类像我一样有用和省时。

© . All rights reserved.