IFileSaveDialog - escolher pastas no Windows 7
-
06-07-2019 - |
Pergunta
No Vista, tenho vindo a utilizar um IFileSaveDialog
para permitir aos usuários escolher um "guardar como" pasta. Usuários exportar uma pasta de imagens, digamos, e necessidade de escolher uma pasta de destino nova ou já existente.
Resumidamente, o código é a seguinte:
IFileSaveDialog* dialog; // created
dialog->SetOptions(FOS_PICKFOLDERS);
dialog->Show(NULL);
dialog->GetResult(&shellItem)
No Windows 7, a opção FOS_PICKFOLDERS
parece ter sido anulado (e é marcado como tal em a API ). O valor de retorno na chamada SetOptions
é E_INVALIDARG
. Se eu usar um IFileOpenDialog, eu estou autorizado a definir a opção de pastas, mas o usuário é solicitado com um erro ao escolher uma pasta inexistente (apesar das minhas bandeiras de ajuste sugerindo para não fazer isso).
Existe uma maneira alternativa de obter o novo IFileDialog
para agir como um "save pasta" diálogo?
[Para dirigir fora alguns comentários, a API SHBrowseForFolder ainda existe, mas ainda não é uma solução aceitável para os nossos decisores UI.]
Solução
A razão para isso pode ser encontrada na documentação:
FOS_PICKFOLDERS:. Presente do Aberto de diálogo oferecendo uma escolha de pastas em vez de arquivos
Usando FOS_PICKFOLDERS para "Save" não deveria ser apoiada mas o Vista não aplicá-la. Use IFileOpenDialog vez e você está pronto para ir. Você está pegando uma pasta existente (não especificar uma pasta para criar), tão aberto sempre foi a escolha correta.
Outras dicas
Eu não tenho jogado ao redor com os do Windows 7 diálogos ainda, mas o download do Windows® API Código Pacote apenas esta manhã como eu estou implementar a barra Thumbnail e Ícone Overlay no aplicativo que eu estou trabalhando. Ele provavelmente vai apontá-lo na direção certa.