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! :)
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.
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;
}
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. :)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.