Solved

CFileDialog changing default directory

Posted on 1998-07-22
14
474 Views
Last Modified: 2013-11-20
I have a class derived from CFileDialog. I have inserted a CComboBox at the bottom of the dialog. In the added combo box are a list of previously used directories for saving reading.
What I want to do is when somebody selects a directory on the ComboBox this will change the default directory in the CFileDialog to the one selected in the ComboBox.
0
Comment
Question by:ernan
  • 7
  • 4
  • 2
  • +1
14 Comments
 
LVL 8

Expert Comment

by:trestan
Comment Utility
You can use SetCurrentDirectory function to the cuurrent directory to the one indicated in the ComboBox.
0
 

Author Comment

by:ernan
Comment Utility
Sorry I also would like the CFileDialog to refresh itself showing the path directory etc.
0
 

Author Comment

by:ernan
Comment Utility
Adjusted points to 175
0
 
LVL 2

Expert Comment

by:jstolan
Comment Utility
This is a little tricky.  The key is to fool the dialog into thinking that the user made the change himself.  When the user selects an item from your combo box, you should manually change the appropriate dialog box controls to match what you want.  You then send a message pretending to be from the control you just changed.

For example, if you modified an Edit Control you would send an EN_CHANGE message to the CFileDialog with the lParam set to the id and handle of the edit control.

I made this a comment because I don't think it's specific enough for an answer, but I hope it gets you on the write track.
0
 
LVL 8

Expert Comment

by:trestan
Comment Utility
Under your ON_EN_CHANGE function of the ComboBox, you should fill in the OPENFILENAME structure (the m_ofn data member of your CFileDialog instance). Then call the CFileDialog::OnFolderChange()function. This should renew the display the list box. Please try to see if there is any problem.
0
 

Author Comment

by:ernan
Comment Utility
Thanks trestan I tried what you said but it did not work, I am now picking up the changes from the combo box and making changes to the m_ofn structure, I tried then to call the OnFolderChange function but this does nothing, I even had a look at the source code for it, it just ASSERT(this), so I think that I may have to destroy and reinitialize the dialog at this stage.
0
 
LVL 8

Expert Comment

by:trestan
Comment Utility
If you close the dialog and open it again, definitely the content should be renewed. But it sounds a little stupid. Actually I think there is must a way to do it. I did not try it, but you can try to post a message WM_NOTIFY CDN_FOLDERCHANGE to the dialog window instead of call the function directely. You see, the default file dialog can change the content when you choose a different path. So it should be working in this way. Just try!
Good luck.
0
How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

 
LVL 8

Expert Comment

by:trestan
Comment Utility
If you close the dialog and open it again, definitely the content should be renewed. But it sounds a little stupid. Actually I think there is must a way to do it. I did not try it, but you can try to post a message WM_NOTIFY CDN_FOLDERCHANGE to the dialog window instead of call the function directely. You see, the default file dialog can change the content when you choose a different path. So it should be working in this way. Just try!
Good luck.
0
 
LVL 8

Expert Comment

by:trestan
Comment Utility
If you close the dialog and open it again, definitely the content should be renewed. But it sounds a little stupid. Actually I think there is must a way to do it. I did not try it, but you can try to post a message WM_NOTIFY CDN_FOLDERCHANGE to the dialog window instead of call the function directely. You see, the default file dialog can change the content when you choose a different path. So it should be working in this way. Just try!
Good luck.
0
 
LVL 8

Accepted Solution

by:
trestan earned 250 total points
Comment Utility
Sorry for the repeated sending.
I send another suggestion after that. But I can not see it. I do not know what's wrong. I want to tell you that add this line in your program:
GetParent()->PostMessage( WM_NOTIFY,  CDN_FOLDERCHANGE, 0);
Please try to see if it works. If the message can be receive by the window, may be you do not need to fill the structure after you use SetCurrentDirectory.
0
 

Author Comment

by:ernan
Comment Utility
Trestan I tried what you said but it crashed in COMCTRL32.dll
0
 
LVL 8

Expert Comment

by:trestan
Comment Utility
Which one you used? Use SetCurrentDirectory then send the message?
0
 

Expert Comment

by:NotJeff
Comment Utility
I tried the above and it didn't work, it crashed.
0
 

Expert Comment

by:NotJeff
Comment Utility
I tried the above and it didn't work, it crashed.
0

Featured Post

What Security Threats Are You Missing?

Enhance your security with threat intelligence from the web. Get trending threat insights on hackers, exploits, and suspicious IP addresses delivered to your inbox with our free Cyber Daily.

Join & Write a Comment

Here is how to use MFC's automatic Radio Button handling in your dialog boxes and forms.  Beginner programmers usually start with a OnClick handler for each radio button and that's just not the right way to go.  MFC has a very cool system for handli…
Introduction: Database storage, where is the exe actually on the disc? Playing a game selected randomly (how to generate random numbers).  Error trapping with try..catch to help the code run even if something goes wrong. Continuing from the seve…
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.
Get a first impression of how PRTG looks and learn how it works.   This video is a short introduction to PRTG, as an initial overview or as a quick start for new PRTG users.

743 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

16 Experts available now in Live!

Get 1:1 Help Now