IFileSaveDialog - 在Windows 7中选择文件夹

时间:2009-10-26 19:58:18

标签: winapi windows-7 folderbrowserdialog

在Vista中,我一直使用IFileSaveDialog让用户选择“另存为”文件夹。例如,用户导出图像文件夹,需要选择新的或现有的目标文件夹。

简单地说,代码是这样的:

IFileSaveDialog* dialog; // created
dialog->SetOptions(FOS_PICKFOLDERS);
dialog->Show(NULL);
dialog->GetResult(&shellItem)

在Windows 7中,FOS_PICKFOLDERS选项似乎已被禁止(并在the API中标记为此选项)。 SetOptions来电的返回值为E_INVALIDARG。如果我使用IFileOpenDialog,我可以设置文件夹选项,但在选择不存在的文件夹时会提示用户输入错误(尽管我的设置标记表示不这样做)。

是否有另一种方法可以让新的IFileDialog充当“保存文件夹”对话框?

[为了取消一些评论,SHBrowseForFolder API仍然存在,但仍然不是我们的UI决策者可接受的解决方案。]

2 个答案:

答案 0 :(得分:5)

原因可以在文档中找到:

FOS_PICKFOLDERS:显示“打开”对话框,提供文件夹而非文件选择。

使用FOS_PICKFOLDERS进行“保存”从未被支持,但Vista并没有强制执行。使用IFileOpenDialog代替,你很高兴。 您正在选择现有文件夹(未指定要创建的文件夹),因此打开始终是正确的选择。

答案 1 :(得分:2)

我还没有使用过Windows 7对话框,但是今天早上我正在我正在处理的应用程序中实现缩略图工具栏和图标叠加时,已经下载了Windows® API Code Pack。它可能会指出你正确的方向。