Click here to Skip to main content
14,599,340 members

CXSBrowseFolder - A Simple Class to Encapsulate SHBrowseForFolder

Rate this:
4.96 (17 votes)
Please Sign up or sign in to vote.
4.96 (17 votes)
19 May 2002CPOL
This class makes it easier to use the shell function SHBrowseForFolder

Sample Image


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);

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

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

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

DWORD CXSBrowseFolder::GetStyle()


  • Returns the current style of the dialog


  • None


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


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


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


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


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


  • title: The text to be displayed


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


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


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


  • 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.


This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


About the Author

Dana Holt
Software Developer (Senior)
United States United States
I started learning C and 68K assembly language on an Atari ST around 1985 or so using the Mark Williams compiler. I was instantly hooked.

My favorite languages are: C/C++, C#, Ruby, and Python.

My first PC clone was a 386SX-25MHz with 4MB of RAM. OMG | :OMG:

Comments and Discussions

GeneralThank you, very useful Pin
Leif Simon Goodwin1-Jan-11 11:42
mvaLeif Simon Goodwin1-Jan-11 11:42 
QuestionHow to add starting folder.... Pin
pige3-May-07 22:34
Memberpige3-May-07 22:34 
AnswerRe: How to add starting folder.... Pin
lyuabe13-Jun-14 11:52
Memberlyuabe13-Jun-14 11:52 
GeneralRegarding CXSBrowseFolder Pin
jk403205-Apr-07 1:42
Memberjk403205-Apr-07 1:42 
GeneralWinCe Pin
Joe ce00113-Dec-05 20:07
MemberJoe ce00113-Dec-05 20:07 
GeneralWindows 2000 Pin
luniv040418-Oct-05 4:44
Memberluniv040418-Oct-05 4:44 
GeneralRe: Windows 2000 Pin
The_Mega_ZZTer24-Oct-05 12:07
MemberThe_Mega_ZZTer24-Oct-05 12:07 
GeneralNew Dialog Style Pin
Casper7022-Jan-03 7:43
MemberCasper7022-Jan-03 7:43 
GeneralRe: New Dialog Style Pin
Dana Holt10-May-03 13:50
MemberDana Holt10-May-03 13:50 
GeneralWorked...good Pin
Anonymous26-Aug-02 8:20
MemberAnonymous26-Aug-02 8:20 
GeneralRe: Worked...good Pin
Dana Holt28-Aug-02 15:11
MemberDana Holt28-Aug-02 15:11 
GeneralAlternatives Pin
20-May-02 22:13
suss20-May-02 22:13 
GeneralGood start Pin
Shog920-May-02 18:23
sitebuilderShog920-May-02 18:23 
GeneralRe: Good start Pin
Dana Holt21-May-02 3:05
MemberDana Holt21-May-02 3:05 
GeneralRe: Good start Pin
real name10-Mar-03 21:48
sussreal name10-Mar-03 21:48 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Posted 19 May 2002


38 bookmarked