Winapi IFileSaveDialog-在Windows 7中选择文件夹

Winapi IFileSaveDialog-在Windows 7中选择文件夹,winapi,windows-7,folderbrowserdialog,Winapi,Windows 7,Folderbrowserdialog,在Vista中,我一直使用IFileSaveDialog让用户选择“另存为”文件夹。例如,用户导出一个图像文件夹,需要选择一个新的或现有的目标文件夹 简而言之,代码如下所示: IFileSaveDialog* dialog; // created dialog->SetOptions(FOS_PICKFOLDERS); dialog->Show(NULL); dialog->GetResult(&shellItem) 在Windows 7中,FOS_PICKFOLDE

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

简而言之,代码如下所示:

IFileSaveDialog* dialog; // created
dialog->SetOptions(FOS_PICKFOLDERS);
dialog->Show(NULL);
dialog->GetResult(&shellItem)
在Windows 7中,
FOS_PICKFOLDERS
选项似乎已被禁用(并在中标记为该选项)。
SetOptions
调用的返回值为
E_INVALIDARG
。如果我使用IFileOpenDialog,我可以设置文件夹选项,但用户在选择不存在的文件夹时会收到错误提示(尽管我的设置标志建议不要这样做)

是否有其他方法使新的
IFileDialog
充当“保存文件夹”对话框


[为了避免一些评论,SHBrowseForFolder API仍然存在,但对于我们的UI决策者来说仍然不是一个可接受的解决方案。]

我还没有使用Windows 7对话框,但就在今天早上,当我在正在使用的应用程序中实现缩略图工具栏和图标覆盖时,下载了。它可能会为您指明正确的方向。

原因可在文档中找到:

:显示“打开”对话框,可选择文件夹而不是文件

使用
FOS\u PICKFOLDERS
进行“保存”本来是不受支持的,但Vista没有强制执行。改用
IFileOpenDialog
即可。
您正在选择一个现有文件夹(而不是指定要创建的文件夹),因此“打开”始终是正确的选择。

有趣的是,Windows团队在4月份的博客示例中使用了此标志!还有来自kazoobrewer的评论,告诉他们它不再有效。我想那就是你了…有时感觉你是唯一一个在野外使用API的开发人员…Windows7开发人员博客条目存档