|I've been discussing this with some other developers - including some Microsoft developers in the forums - and there isn't a way without going to a LOT of work. Basically, you have to encapsulate the functionality of the
GetSaveFileName functions, as well as the
OPENFILENAME struct. This is what the
OpenFileDialog and the
SafeFileDialog (which inherit most of the functionality from the
FileDialog class) do.
The biggest problem is dealing with the dialog template you'd assign to the
lpTmeplateName member of the
OPENFILENAME structure. In Win32 this isn't too hard because you can use resources (stored in the .rsrc section of a PE (portable executable)). To have this managed is definitely NOT easy! The engineers I even talked to do mentioned something along the lines of "not having time" to do this for 1.0 (which, since it's still not in 1.1 and doesn't appear to be in 2.0 means, "it's too hard").
If you want this managed, there are ways of making a
DLGTEMPLATE out of a dialog resource (namely, your
Control that will physically extend the open and safe file dialogs), but you have to worry about converting units from pixels to dlg units and a lot more. There was an example I found on the 'net but I don't remember where. Just google for it if you dare try this. You'll need to P/Invoke all that code used in the exmample, as well as things like the
GetDeviceCaps to get the proper unit measurements.
My recommendation is to write a native DLL that does this instead. You can then encapsulate your own custom open or save file dialogs in a
Component like Microsoft does. Just make sure you distribute this native DLL with your application, putting it in a location that can be resolved (like the current working directory or any directory in the PATH environment variable). I don't have a sample because this alternative doesn't really work for my company because we use an Internet-deployed (ala touchless deployment) app and try to avoid native resources at all costs. I found a way around using a different approach.
-----BEGIN GEEK CODE BLOCK-----
GCS/G/MU d- s: a- C++++ UL@ P++(+++) L+(--) E--- W+++ N++ o+ K? w++++ O- M(+) V? PS-- PE Y++ PGP++ t++@ 5 X+++ R+@ tv+ b(-)>b++ DI++++ D+ G e++>+++ h---* r+++ y+++
-----END GEEK CODE BLOCK-----