
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:
CXSBrowseFolder foo;
foo.ModifyStyle(BIF_NEWDIALOGSTYLE, 0);
foo.SetTitle("This is the title text. Use CXSBrowseFolder::SetTitle() to set it:");
char path[MAX_PATH];
switch (foo.Show(GetSafeHwnd(), path)) {
case CXSBrowseFolder::RET_OK:
MessageBox(path, "You Selected", MB_ICONINFORMATION | MB_TOPMOST);
break;
case CXSBrowseFolder::RET_CANCEL:
MessageBox("Operation cancelled.", "Info", MB_ICONINFORMATION | MB_TOPMOST);
break;
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
Paramerters:
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.