PDA

Visualizza la versione completa : [VC++] Selezione Cartella


VaKeRock
02-02-2005, 16:39
Ciao a tutti!
dovrei realizzare una tasto che premuto mi apre una specie di esplora risporse che mi permette di selezionare una cartella...

Poi io sfrutterò il path della cartella restituito... per salvare dei file al suo interno.
Grazie
VKR :oVVoVe:

netarrow
02-02-2005, 19:39
Io solitamente uso l'API GetOpenFileName (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/userinput/commondialogboxlibrary/commondialogboxreference/commondialogboxfunctions/getopenfilename.asp) .

C'è anche un esempio:


OPENFILENAME ofn; // common dialog box structure
char szFile[260]; // buffer for file name
HWND hwnd; // owner window
HANDLE hf; // file handle

// Initialize OPENFILENAME
ZeroMemory(&ofn, sizeof(ofn));
ofn.lStructSize = sizeof(ofn);
ofn.hwndOwner = hwnd;
ofn.lpstrFile = szFile;
//
// Set lpstrFile[0] to '\0' so that GetOpenFileName does not
// use the contents of szFile to initialize itself.
//
ofn.lpstrFile[0] = '\0';
ofn.nMaxFile = sizeof(szFile);
ofn.lpstrFilter = "All\0*.*\0Text\0*.TXT\0";
ofn.nFilterIndex = 1;
ofn.lpstrFileTitle = NULL;
ofn.nMaxFileTitle = 0;
ofn.lpstrInitialDir = NULL;
ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;

// Display the Open dialog box.

if (GetOpenFileName(&ofn)==TRUE)
hf = CreateFile(ofn.lpstrFile, GENERIC_READ,
0, (LPSECURITY_ATTRIBUTES) NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,
(HANDLE) NULL);

szFile conterrà il path + il nome del file, se ha te serve solo il path basterà fare una substringa che si ferma all'ultimo \.

Se stai usando MFC non saprei aiutarti e non conosco l'api che crea la FileDialog specifica per selezionare le cartelle.

:ciauz:

Xadoom
02-02-2005, 20:48
Credo che quello che stai cercando sia proprio questo:
SHBrowseForFolder()
Qui trovi la descrizione e a fondo pagina anche un esempio di utilizzo. :ciauz:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/functions/shbrowseforfolder.asp

unomichisiada
02-02-2005, 22:17
Originariamente inviato da Xadoom
Credo che quello che stai cercando sia proprio questo:
SHBrowseForFolder()
Qui trovi la descrizione e a fondo pagina anche un esempio di utilizzo. :ciauz:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/functions/shbrowseforfolder.asp
Con le MFC se non ricordo male devi creare un oggetto di tipo CFileDialog (che estende CDialog) ed usare uno dei suoi metodi per mostrare il dialogo stesso.Controllati la documentazione della classe.I metodi di CFileDialog non sono altro che degli wrapper per l'API che ti ha consigliato netarrow.Ciao

Xadoom
03-02-2005, 11:23
Ho usato semplicemente le API di windows facendo così:


BROWSEINFO bi;
LPITEMIDLIST pidl;

bi.hwndOwner = hwnd;
bi.pidlRoot = NULL;
bi.pszDisplayName = 0;
bi.lpszTitle = TEXT("Imposta la directory");
bi.ulFlags = BIF_RETURNFSANCESTORS | BIF_RETURNONLYFSDIRS;
bi.lpfn = NULL;
bi.lParam = 0;

pidl = SHBrowseForFolder(&bi);
SHGetPathFromIDList(pidl,szDir);

Funziona benissimo e fa comparire una di quelle finestrelle in cui si può selezionare la directory.
:ciauz:

Loading