IFileSaveDialog - выбор папок в Windows 7 - PullRequest
6 голосов
/ 26 октября 2009

В Vista я использовал IFileSaveDialog, чтобы пользователи могли выбрать папку «сохранить как». Например, пользователи экспортируют папку с изображениями и должны выбрать новую или существующую целевую папку.

Вкратце, код выглядит так:

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

В Windows 7 опция FOS_PICKFOLDERS, по-видимому, запрещена (и помечена как таковая в API ). Возвращаемое значение при вызове SetOptions равно E_INVALIDARG. Если я использую IFileOpenDialog, мне разрешается устанавливать параметр папок, но пользователю предлагается ошибка при выборе несуществующей папки (несмотря на мои флаги настройки, предлагающие не делать этого).

Есть ли альтернативный способ заставить новый IFileDialog выступать в качестве диалогового окна "сохранить папку"?

[Чтобы исключить некоторые комментарии, API SHBrowseForFolder все еще существует, но все еще не является приемлемым решением для наших разработчиков UI.]

Ответы [ 2 ]

5 голосов
/ 01 декабря 2009

Причину этого можно найти в документации:

FOS_PICKFOLDERS: Представить диалоговое окно Открыть, предлагающее выбор папок, а не файлов.

Использование FOS_PICKFOLDERS для «Сохранить» никогда не предполагалось поддерживать, но Vista не применяла его. Вместо этого используйте IFileOpenDialog, и все готово. Вы выбираете существующую папку (не указываете папку для создания), поэтому открыть всегда был правильный выбор.

2 голосов
/ 26 октября 2009

Я еще не поигрался с диалоговыми окнами Windows 7, но скачал Windows® API Code Pack только сегодня утром, когда я внедряю панель миниатюр и наложение значков в приложении, над которым я работаю , Это, вероятно, укажет вам правильное направление.

...