2009-10-26 10 views
5

In Vista, ho utilizzato uno per consentire agli utenti di scegliere una cartella "salva-come". Gli utenti esportano una cartella di immagini, ad esempio, e devono scegliere una cartella di destinazione nuova o esistente.IFileSaveDialog - Scelta cartelle in Windows 7

In breve, il codice va in questo modo:

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

In Windows 7, l'FOS_PICKFOLDERS opzione appare essere stato annullato (ed è contrassegnato come tale in the API). Il valore restituito sulla chiamata SetOptions è E_INVALIDARG. Se uso un IFileOpenDialog, mi è consentito impostare l'opzione per le cartelle, ma all'utente viene richiesto un errore quando si sceglie una cartella inesistente (nonostante le mie flag di impostazione suggeriscano di non farlo).

Esiste un modo alternativo per impostare il nuovo IFileDialog come una finestra di dialogo "Salva cartella"?

[Per scongiurare alcuni commenti, l'API SHBrowseForFolder esiste ancora, ma non è ancora una soluzione accettabile per i nostri decisori UI.]

+0

In modo divertente, il team di Windows ha utilizzato questo flag in un esempio sul proprio blog in aprile! http://windowsteamblog.com/blogs/developers/archive/2009/04/16/light-up-with-windows-7-libraries.aspx –

+0

E un commento di kazoobrewer che gli dice che non funziona più. Immagino che potresti essere tu allora ... –

+2

A volte sembra che tu sia l'unico sviluppatore che utilizza un'API in natura ... –

risposta

4

La ragione di questo si possono trovare nella documentazione:

FOS_PICKFOLDERS: presentare la finestra di dialogo Apri che offre una scelta di cartelle piuttosto che i file.

L'utilizzo di FOS_PICKFOLDERS per "Salva" non avrebbe mai dovuto essere supportato, ma Vista non l'ha applicato. Usa IFileOpenDialog invece e sei a posto. Stai selezionando una cartella esistente (non specificando una cartella da creare), quindi aprire era sempre la scelta corretta.

2

non ho giocato in giro con Windows 7 finestre di dialogo ancora, ma scaricato il Windows® API Code Pack proprio stamattina mentre sto implementando la barra degli strumenti di anteprima e l'icona sovrapposizione nell'applicazione su cui sto lavorando. Probabilmente ti indirizzerà nella giusta direzione.