Solved

CFileDialog

Posted on 2006-07-06
5
1,349 Views
Last Modified: 2013-11-20
I want to be able to select a folder on my HD and put the path into a text field. This should be easy enough except I can't get the CFileDialog to allow me to just select a folder. It needs me to select a file. I assume there's a flag that specifies you don't need to select a file, but I can't figure out what the flag is. I've checked msdn and can't see it. I have done it easily enough before with Win32, but can't seem to get CFileDialog to do it.

I tried creating the dialog as follows:
CFileDialog SourceFile(TRUE, NULL, NULL, !OFN_FILEMUSTEXIST);

All this does is specify that the file doesn't have to be there. This way, I can navigate to the folder, type in any randon gibberish, and when the dialog closes, extract the folder path. This is a little messy and would rather be able to just select the folder.

Any ideas what I'm doing wrong?
0
Comment
Question by:krispin
5 Comments
 
LVL 5

Accepted Solution

by:
bastibartel earned 30 total points
ID: 17054787
Hi there,

You cannot specify !OFN_FILEMUSTEXIST as a flag to CFileDialog::CFileDialog ()
The flags cannot be negated.

CFileDialog as it is does not allow folder selection.

Check this out (EE):
http://www.experts-exchange.com/Programming/Programming_Languages/MFC/Q_10244185.html

or (Codeproject)
http://www.codeproject.com/dialog/XFolderDialog.asp?df=100&forumid=163247&exp=0&select=1073456

Cheers,
Sebastian
0
 
LVL 22

Assisted Solution

by:mahesh1402
mahesh1402 earned 20 total points
ID: 17056323
>>I want to be able to select a folder on my HD and put the path into a text field.

Any reason you dont want to use 'Browse For Folder' Dialog using SHBrowseForFolder() ?
http://www.codechamber.com/tutorials/cpptechniques/browseforfolder.htm

Otherwise look at this 'XFolderDialog - a folder selection dialog based on CFileDialog'
http://www.codeproject.com/dialog/XFolderDialog.asp

-MAHESH


0
 
LVL 22

Expert Comment

by:mahesh1402
ID: 17056327
OOPs ....not looked.....XFolderDialog already given by bastibartel ..

0
 
LVL 7

Expert Comment

by:nafis_devlpr
ID: 17080147
what you can do is to derive a class of your own using the CFileDialog class as base class. Then in the header file of the class you just created just replace the constructor with the following.

YourClass::YourClass(BOOL bOpenFileDialog, LPCTSTR lpszDefExt, LPCTSTR lpszFileName,
            DWORD dwFlags, LPCTSTR lpszFilter, CWnd* pParentWnd) :
            CFileDialog(bOpenFileDialog, lpszDefExt, "Don't Type Anything here", dwFlags, lpszFilter, pParentWnd)
{
}


then override the virtual function "OnFileNameOK()" of CFileDialog and give the following body to this function

BOOL YourClass::OnFileNameOK()
{
      return 0;
}


and thats it, now whenever u need the dialog invoke it in this way

YourClass m_fdFilePath(FALSE, NULL, "", OFN_HIDEREADONLY, NULL);

but u will have to parse the folder path which can be done in the following way

int i;
CString strm_fdFilePath.GetPathName()
i=str.ReverseFind('\\')+1;
if(i > 0)
      str.SetAt(i, '\0');

and presto, u will get the folder path u have just selected.

Nafis
0
 
LVL 2

Expert Comment

by:snyp
ID: 17185578
you can browse for a folder using about 4 lines of code;

void MyApp::OnButton1() {

char folderName[512];
BROWSEINFO browseInfo = { 0 };

LPITEMIDLIST itemIdList = SHBrowseForFolder(&browseInfo);
SHGetPathFromIDList(itemIdList, folderName);

if (strlen(folderName)) {
// a folder was selected and it's path is here
}
}
0

Featured Post

Announcing the Most Valuable Experts of 2016

MVEs are more concerned with the satisfaction of those they help than with the considerable points they can earn. They are the types of people you feel privileged to call colleagues. Join us in honoring this amazing group of Experts.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

In this article, I'll describe -- and show pictures of -- some of the significant additions that have been made available to programmers in the MFC Feature Pack for Visual C++ 2008.  These same feature are in the MFC libraries that come with Visual …
Introduction: Finishing the grid – keyboard support for arrow keys to manoeuvre, entering the numbers.  The PreTranslateMessage function is to be used to intercept and respond to keyboard events. Continuing from the fourth article about sudoku. …
This video will show you how to get GIT to work in Eclipse.   It will walk you through how to install the EGit plugin in eclipse and how to checkout an existing repository.
This video shows how to quickly and easily add an email signature for all users on Exchange 2016. The resulting signature is applied on a server level by Exchange Online. The email signature template has been downloaded from: www.mail-signatures…

856 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question