有关CFileDialog/GetOpenFileName的两个问题,望解答...

时间:2022-07-09 06:16:50
一般的文件打开对话框是这样的:

http://hiphotos.baidu.com/doomsdayer/pic/item/2080e3af8b6c3ab4faed5051.jpg

一般的目录选择对话框是这样的:

http://hiphotos.baidu.com/doomsdayer/pic/item/2080e3af8bd13ab4faed50d4.jpg

 

我看到有把这两者结合起来的新式的目录选择对话框:

http://hiphotos.baidu.com/doomsdayer/pic/item/a8c44b1f3de51a2cf724e4db.jpg

 

请问这种对话框是怎么做出来的呢?我研究了很久CFileDialog, OPENFILENAME, SHBrowseForFolder可还是得不到答案....

 

还有一个问题,我看到有些自定义风格的CFileDialog/GetOpenFileName,比如notapad的打开文件对话框:

http://hiphotos.baidu.com/doomsdayer/pic/item/d10f10777c1bc154b051b9b8.jpg

下面添加了ComboBox,我研究了一下,发现可以考虑对OPENFILENAME设置OFN_ENABLETEMPLATEHANDLE或OFN_ENABLEHOOK。

但问题是,这两个标记位都不能和OFN_EXPLORER共存,一旦设置上面的两个标记位,对话框就会变为这个样子:

http://hiphotos.baidu.com/doomsdayer/pic/item/249a8f7a919b38a22f73b366.jpg

请问应该怎样才能做出notepad的那种打开文件对话框?

13 个解决方案

#1


从CFileDialog派生子类来完成就可以了。

#2


请问能具体讲讲吗?我用模板的办法是不行的,参见问题2.

#3


你把打开按钮去掉,添加个选择文件夹按钮上去,再自己处理这个点击消息

#4


那个可以用CFolderPickerDialog来做,这个类在Vista下面会和CFileDialog一样用IFileDialog,不过加了个FOS_PICKFOLDERS风格。在之前版本的Windows上(实际上MFC10也只支持Windows XP SP2或更高版本)会调用SHBrowseForFolder

#5


回复3楼:
忘了说明一点,我用的是vc6....
我试验了一下,如果用CFileDialog的话,无论如何也没法在win7下使用Explorer风格的新式对话框...就算继承了也不行,想用如图所示的新式对话框只能用OpenFileName。

#6


回复4楼:
因为我用的是VC6,所以没法用CFolderPickerDialog.....
我以为用底层的OpenFileName也能实现呢.....

#7


你的图片看不到

#8


回复7楼:
我试了一下,图片在其他地方没有问题的。

#9


引用 1 楼 happyparrot 的回复:
从CFileDialog派生子类来完成就可以了。


用这个,可以空出一块来显示你的子对话框,在子对话框里,你可以模仿你需要的效果,添加相应的控件和数据。

那种带图片预览效果的就是这样做出来的

#10


VC6也不支持Vista的Windows SDK的。你可以考虑在高版本的VC里写个COM的DLL给VC6的程序用。

#11


在高版本的VC里写个COM的DLL给VC6的程序用,
这个怎么用,COM的DLL需要静态编译么?

#12


动态编译也可以,不过这样的话需要发布两个版本的C++运行库

#13


您好
我是本版版主
此帖已多日无人关注
请您及时结帖
如您认为问题没有解决可按无满意结帖处理
另外本版设置了 疑难问题汇总帖
并已在版面置顶
相关规定其帖子中有说明
您可以根据规定提交您帖子的链接
如您目前不想结帖只需回帖说明
我们会删除此结帖通知

见此回复三日内无回应
我们将强制结帖
相关规定详见界面 界面版关于版主结帖工作的具体办法

#1


从CFileDialog派生子类来完成就可以了。

#2


请问能具体讲讲吗?我用模板的办法是不行的,参见问题2.

#3


你把打开按钮去掉,添加个选择文件夹按钮上去,再自己处理这个点击消息

#4


那个可以用CFolderPickerDialog来做,这个类在Vista下面会和CFileDialog一样用IFileDialog,不过加了个FOS_PICKFOLDERS风格。在之前版本的Windows上(实际上MFC10也只支持Windows XP SP2或更高版本)会调用SHBrowseForFolder

#5


回复3楼:
忘了说明一点,我用的是vc6....
我试验了一下,如果用CFileDialog的话,无论如何也没法在win7下使用Explorer风格的新式对话框...就算继承了也不行,想用如图所示的新式对话框只能用OpenFileName。

#6


回复4楼:
因为我用的是VC6,所以没法用CFolderPickerDialog.....
我以为用底层的OpenFileName也能实现呢.....

#7


你的图片看不到

#8


回复7楼:
我试了一下,图片在其他地方没有问题的。

#9


引用 1 楼 happyparrot 的回复:
从CFileDialog派生子类来完成就可以了。


用这个,可以空出一块来显示你的子对话框,在子对话框里,你可以模仿你需要的效果,添加相应的控件和数据。

那种带图片预览效果的就是这样做出来的

#10


VC6也不支持Vista的Windows SDK的。你可以考虑在高版本的VC里写个COM的DLL给VC6的程序用。

#11


在高版本的VC里写个COM的DLL给VC6的程序用,
这个怎么用,COM的DLL需要静态编译么?

#12


动态编译也可以,不过这样的话需要发布两个版本的C++运行库

#13


您好
我是本版版主
此帖已多日无人关注
请您及时结帖
如您认为问题没有解决可按无满意结帖处理
另外本版设置了 疑难问题汇总帖
并已在版面置顶
相关规定其帖子中有说明
您可以根据规定提交您帖子的链接
如您目前不想结帖只需回帖说明
我们会删除此结帖通知

见此回复三日内无回应
我们将强制结帖
相关规定详见界面 界面版关于版主结帖工作的具体办法