Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles
(untagged)

CXSBrowseFolder - A Simple Class to Encapsulate SHBrowseForFolder

0.00/5 (No votes)
19 May 2002 6  
This class makes it easier to use the shell function SHBrowseForFolder

Sample Image

Introduction

As most of you probably know, the shell function SHBrowseForFolder is easy to use, but there are a few things that have to be done every time that hardly ever change. One example is having to free the ITEMIDLIST pointer returned by the shell after the folder/file path is queried with SHGetPathFromIDList. My class takes care of that for you, and it automatically sets up default values for other parameters.

Here's an example of using CXSBrowseFolder taken from the demo application:

// 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;
}

This class is very simple, but here is an overview of the methods:

DWORD CXSBrowseFolder::GetStyle()

Description

  • Returns the current style of the dialog

Parameters

  • None

Return

  • The current style of the dialog (refer to the SHBrowseForFolder docs for style information)
DWORD CXSBrowseFolder::ModifyStyle(DWORD add, DWORD remove = 0)

Description

  • Adds and/or removes styles from the dialog (See shell docs for available styles)

Parameters

  • add: style(s) to add
  • remove (optional): style(s) to remove

Return

  • Current style (after modifications)
void CXSBrowseFolder::SetTitle(LPSTR title)

Description

  • Sets the text displayed above the tree view in the dialog

Parameters

  • title: The text to be displayed

Return

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

Description

  • Shows the folder/file browse dialog with the current settings

Parameters

  • parent: HWND of a parent for the dialog
  • pathBuffer: Buffer that will be filled with the path information of the selected file/folder

Return

  • CXSBrowseFolder::RET_CANCEL: User clicked the dialog's cancel button
  • CXSBrowseFolder::RET_NOPATH: The shell did not return a valid path for the selection
  • CXSBrowseFolder::RET_OK: The OK button was pressed and pathBuffer should contain a valid path

This class doesn't support customizing the dialog, but Microsoft doesn't recommend that with the new dialog style anyway because it's resizeable.

Well, that's about it for this article. I hope you find this simple class as useful and time saving as I have.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here