Solved

CFileDialog

Posted on 2006-07-06
5
1,344 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

How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

Join & Write a Comment

Suggested Solutions

Exception Handling is in the core of any application that is able to dignify its name. In this article, I'll guide you through the process of writing a DRY (Don't Repeat Yourself) Exception Handling mechanism, using Aspect Oriented Programming.
Have you tried to learn about Unicode, UTF-8, and multibyte text encoding and all the articles are just too "academic" or too technical? This article aims to make the whole topic easy for just about anyone to understand.
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 tutorial demonstrates a quick way of adding group price to multiple Magento products.

758 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

Need Help in Real-Time?

Connect with top rated Experts

19 Experts available now in Live!

Get 1:1 Help Now