Click here to Skip to main content
15,867,594 members
Articles / Desktop Programming / MFC
Article

SelectDialog - A Multiple File and Folder Select Dialog

Rate me:
Please Sign up or sign in to vote.
3.38/5 (35 votes)
26 Dec 2008CPOL2 min read 138.4K   7.7K   35   33
A multi select files and folders browse window
SelectDlg.jpg

Introduction

What's a Problem?

It has probably happened that you need a dialog like CFileDialog (MFC) that allows you to select some items together. I do not mean multi select file feature but multi select files and folders.

If you search MSDN and the internet for libraries which do that for you, maybe the best things you would find are CFileDialog for selecting single or multiple files and SHBrowseForFolder API for selecting a single folder.
So the problem is that you need a utility that makes it possible to select every browsable thing.

What Should We Do To Overcome the Problem?

If you want to have a single class using it you can select a file or a folder or some files or some folders or a mixture of them. I searched for such a utility but found nothing. So I decided to provide it and the best solution that I found was changing CFileDialog to do what I need.

Solution

CSelectDialog is a class that is inherited from CFileDialog and makes it possible for you to browse your computer or network and select a mixture of files and folders. For my convenience (as implementer) and user, I add a member of type CStringArray to the class to keep selected items after dialog returns IDOK.

Difference of CSelectDialog and CFileDialog

  1. Their user interface has some differences (You can see it in sample image in Vista.)
  2. OnInitDone, OnFolderChange, OnFileNameOK and WndProc functions of CFileDialog are overridden in CSelectDialog.

Using the Code

Use of CSelectDialog is similar to CFileDialog. Simply define a variable of type CSelectDialog and DoModal it. After user clicks the OK button, you can access the full path of selected items via m_lstSelectedItems member. A code snippet that does this work is shown below:

C++
CSelectDialog ofd(TRUE, _T("*.*"), NULL,
        OFN_HIDEREADONLY | OFN_ALLOWMULTISELECT,
        _T("All files and folders(*.*)|*.*||") );

if( ofd.DoModal() != IDOK )
    return;

for( int i=0; i<ofd.m_SelectedItemList.GetCount(); i++ )
    m_lstSelectedItems.AddString( ofd.m_SelectedItemList[i] );

Some Notes

  1. If you want to disable multi select, you should make a change in CSelectDialog constructor.

  2. If you want to hide a combobox and its label below select dialog, you should uncomment 2 lines below in OnInitDone function:

    C++
    ...
    //HideControl(cmb13);
    //HideControl(stc3);
    ...
    
  3. For prevention of exception in XP SP3, you should comment all lines containing cmb13 in OnInitDone function.

Points of Interest

When I searched the Internet, nobody provided such a browse dialog with this feature.

History

  • Version 1.0 July 2008: First version of SelectDialog

License

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


Written By
Iran (Islamic Republic of) Iran (Islamic Republic of)
حجت اله بهلولی
حجت اله بهلولي
متولد 18 بهمن 1360 اصفهان
مدرک کارشناسی ارشد مهندسی کامپیوتر - نرم افزار

Hojjat Bohlooli
I was born in 7 Feb 1982, Isfahan Iran
Bachelor of science in Computer Science from Yazd university
Master of science in Software Engineering from university of Isfahan

Comments and Discussions

 
QuestionHello, I would like to ask c# how to use the above function Pin
Member 1487017723-Jun-20 15:15
Member 1487017723-Jun-20 15:15 
GeneralTo Support Only Folder selection Pin
Subramaniam Natarajan14-May-15 22:03
Subramaniam Natarajan14-May-15 22:03 
QuestionAccess violation writing location 0x00000020 Pin
Member 941911216-Sep-14 17:51
Member 941911216-Sep-14 17:51 
AnswerRe: Access violation writing location 0x00000020 Pin
thefadden25-Nov-14 12:11
thefadden25-Nov-14 12:11 
GeneralRe: Access violation writing location 0x00000020 Pin
Member 252452728-Aug-15 13:25
Member 252452728-Aug-15 13:25 
BugFail to grab the Directory path sometimes Pin
Member 1084033124-Jun-14 11:08
Member 1084033124-Jun-14 11:08 
GeneralRe: Fail to grab the Directory path sometimes Pin
thefadden30-Nov-14 16:33
thefadden30-Nov-14 16:33 
GeneralMy vote of 5 Pin
Hojjat Bohlooli28-Jul-12 3:28
Hojjat Bohlooli28-Jul-12 3:28 
Questionhow to use it in vc6.0 Pin
xunonxyz22-Apr-12 1:16
xunonxyz22-Apr-12 1:16 
Generalcompiles using Visual Studio 2010 on Windows Server 2008 64-bit Pin
RedDk23-May-11 7:50
RedDk23-May-11 7:50 
QuestionWindows 7 and VS2008 - not working !? Pin
Miguelit021-Feb-10 22:56
Miguelit021-Feb-10 22:56 
AnswerRe: Windows 7 and VS2008 - not working !? Pin
Nic Wilson30-Jun-10 13:40
Nic Wilson30-Jun-10 13:40 
GeneralRe: Windows 7 and VS2008 - not working !? Pin
Hojjat Bohlooli1-Jul-10 2:55
Hojjat Bohlooli1-Jul-10 2:55 
GeneralRe: Windows 7 and VS2008 - not working !? Pin
Member 1084033126-Jun-14 7:44
Member 1084033126-Jun-14 7:44 
AnswerRe: Windows 7 and VS2008 - not working !? Pin
Hojjat Bohlooli28-Jul-12 4:10
Hojjat Bohlooli28-Jul-12 4:10 
GeneralRe: Windows 7 and VS2008 - not working !? Pin
Miguelit013-Aug-12 11:42
Miguelit013-Aug-12 11:42 
QuestionWould this be possible in C#? Pin
Tony Horray1-Feb-10 16:07
Tony Horray1-Feb-10 16:07 
AnswerRe: Would this be possible in C#? Pin
Member 77366443-Apr-11 11:12
Member 77366443-Apr-11 11:12 
GeneralWhy is the last selected file stored at address zero (in the m_lstSelectedItems[0] ) Pin
jtchangvit10-Nov-09 3:53
jtchangvit10-Nov-09 3:53 
Dear Hojjat Bohlooli

When I ran the demoproject, I found it only lists 16 files and the last file that I selected. It can not show all the selected files. How do I conquer this problem ?

Best Reguards

Jiann-Tsair Chang
Nov. 10, 2009

Be Happy Every Day.

GeneralRe: Why is the last selected file stored at address zero (in the m_lstSelectedItems[0] ) Pin
Hojjat Bohlooli12-Nov-09 4:02
Hojjat Bohlooli12-Nov-09 4:02 
GeneralRe: Why is the last selected file stored at address zero (in the m_lstSelectedItems[0] ) Pin
Hojjat Bohlooli15-Nov-09 2:01
Hojjat Bohlooli15-Nov-09 2:01 
GeneralBug with hidden file extensions Pin
paste20009-Apr-09 2:07
paste20009-Apr-09 2:07 
GeneralVS2008 and Vista Pin
pavritch12-Jan-09 19:48
pavritch12-Jan-09 19:48 
GeneralRe: VS2008 and Vista Pin
Nagender2-May-09 2:30
Nagender2-May-09 2:30 
GeneralRe: VS2008 and Vista Pin
mark gooding18-Sep-09 0:34
mark gooding18-Sep-09 0:34 

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.