PDA

View Full Version : [VisualC++]: selezionare una cartella


gargamella75
27-06-2006, 12:23
Sapete se esiste l'equivalente della classe CFileDialog per selezionare però non un file, bensì una cartella?
Mi aspetto che ci sia, e dovrebbe consentirmi di muovermi nelle risorse del computer mediante l'approccio 'ad albero', con le crocette per espandere le cartelle, fino a quella desiderata.
Qualcuno può aiutarmi?
Denghiu! :)

andbin
27-06-2006, 12:41
Sapete se esiste l'equivalente della classe CFileDialog per selezionare però non un file, bensì una cartella?
Mi aspetto che ci sia, e dovrebbe consentirmi di muovermi nelle risorse del computer mediante l'approccio 'ad albero', con le crocette per espandere le cartelle, fino a quella desiderata.A livello di API Win32 esiste la funzione SHBrowseForFolder, vedi <qui> (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/functions/shbrowseforfolder.asp).
Non so dirti se a livello di MFC esiste una qualche classe che faccia da "wrapper" a questa funzione.

andbin
27-06-2006, 14:53
Ho visto sul VC++ e mi sembra che non ci sia una classe MFC apposita che gestisca la SHBrowseForFolder.

Comunque ti posto questo semplice esempio:
#define STRICT
#include <windows.h>
#include <shlobj.h>

INT APIENTRY WinMain (HINSTANCE hInstance, HINSTANCE hPrevious, LPSTR lpszCmdLine, INT iCmdShow)
{
BROWSEINFO bi;
LPITEMIDLIST lpiil;
CHAR szPath[MAX_PATH];

ZeroMemory (&bi, sizeof (BROWSEINFO));

bi.lpszTitle = "Seleziona un path";
bi.ulFlags = BIF_RETURNONLYFSDIRS;

lpiil = SHBrowseForFolder (&bi);

if (lpiil != NULL)
{
if (SHGetPathFromIDList (lpiil, szPath))
{
MessageBox (NULL, szPath, "Path selezionato", MB_OK);
}
}

return 0;
}

Andlea
27-06-2006, 15:12
BROWSEINFO bi = { 0 };
bi.lpszTitle = _T("Scegli la directory");
LPITEMIDLIST pidl = SHBrowseForFolder(&bi);
if ( pidl != 0 ){
TCHAR path[MAX_PATH];
if(SHGetPathFromIDList(pidl, path)){
FaiQualcosa(path);
}

}


edit: non avevo visto la risposta di andbin

gargamella75
27-06-2006, 15:16
Ok...grazie 1000, ci provo subito. :)