CFileDialog Clone

Environment: The code for this article is specific to Visual C++ 6

While we have many code that make dialogs different from the CFileDialog, I am trying to make a dialog that is as close to the CFileDialog as possible. Why reinvent the wheel? There are two reasons.

First reason: Microsoft does not provide a template name nor a resource ID of the CFileDialog. So the CFileDialog can only DoModal(). We will have a hard time if we need a file dialog as one page of a property-sheet/wizard.

Second reason: Many programmers may need only a small portion of the functionalities of CFileDialog. They can copy and paste the code from my dialog.

There are many interesting code snipets in the program.

The use of CComboBoxEx (Suggested by Joseph). This simplified the original code. But the program can no longer be built in VC5. If you need a VC5 version, I may e-mail one to you.

How to display in a list control the file icons for all files. One article in this site uses icon index, I used hIcon attribute in the function SHGetFileInfo()

Traverse along a filepath and get needed information on the way.

The code shows how to use OWNERDRAW for CListBoxes. For disabled button images, one needs to draw additional lines to make the picture look right

Drag and drop items in a list control. There is an article in this site on this topic, but the drag image does not show at the exact right position.

My file dialog is still not identical to CFileDialog yet since I cannot afford more time now. I will add the following features when I got time:
1. In CFileDialog, the columns always align to the left. I need to overridr OnHScroll().
2. Only three commands (Select, Rename, Delete) in the popup menu are coded. The rename function is not quite right yet. It cannot distinguish empty entry from no change. Any comments and suggestions are welcome.

Download source - 27 KB

Date Last Updated: April 24, 1999