[MFC]SHBrowseForFolder Verzeichnis vorgeben

NightWalk3r

Well-known member
26 April 2006
45
1
Hi,
hab einen BrowsforFolder Dialog erstellt, nun habe ich gelesen das man das Verzeichnis ab dem angezeigt werden soll, vorgeben kann.
Code:
bi.hwndOwner      = m_Verzeichnisse;	
bi.pidlRoot       = NULL;
bi.pszDisplayName = "Speichern unter";  
bi.lpszTitle      = NULL; 
bi.ulFlags        = BIF_RETURNONLYFSDIRS;
bi.lpfn           = NULL;           
bi.lParam         = 0;    
bi.iImage         = 0; 
pidl = SHBrowseForFolder(&bi);

mein Problem beseteht allerdings darin ein bi.pidlRoot anzugeben. Es ist vom Typ ITEMIDLIST. Habe im Internet schon ein paar sachen dazu gefunden, aber bisher hat noch keines davon funktioniert.:(

Danke schon einmal für die Hilfe
 
sorry, leutz hab es doch noch selbst gelöst.

Habe den ganzen Morgen etwas gesucht, poste ich hier und schon finde ich was gutes. :LOL:
 
NightWalk3r schrieb:
Habe den ganzen Morgen etwas gesucht, poste ich hier und schon finde ich was gutes. :LOL:
Dann lass uns aber auch teilhaben, an dem, was du gefunden hast ;)
 
ah, das passt ganz gut. soweit funktioniert das nämlich, nur nach der ver.auswahl stürzt das Programm ab...vieleicht sieht ja jemand den fehler


PHP:
	BROWSEINFO bi;
	LPITEMIDLIST pidl;
	IShellFolder *psf = NULL;
	WCHAR root[MAX_PATH];
	char szPath[MAX_PATH];

	bi.hwndOwner      = NULL;					
  	bi.pszDisplayName = "Speichern unter";  
  	bi.lpszTitle      = "Speichern unter";
  	bi.ulFlags        = BIF_RETURNONLYFSDIRS;
  	bi.lpfn           = NULL;           

	 

	  
	 MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,m_SavePath,-1,root,MAX_PATH); 

	  
	 SHGetDesktopFolder(&psf); 
	 psf->ParseDisplayName(NULL,NULL,root,NULL,&pidl,NULL); 

	 bi.pidlRoot = pidl; 
	
	pidl = SHBrowseForFolder(&bi);

	 SHGetPathFromIDList(pidl, szPath); 	
	MessageBox(szPath);

	 if(pidl) 
	{ 
		IMalloc* pMalloc = NULL; 

		if(SUCCEEDED(SHGetMalloc(&pMalloc))) 
		{ 
			pMalloc->Free((PVOID)pidl);  //pidl freigeben 
			pMalloc->Release(); 
		} 
	}
 
NightWalk3r schrieb:
soweit funktioniert das nämlich, nur nach der ver.auswahl stürzt das Programm ab...vieleicht sieht ja jemand den fehler
Ich mich mit den MFC weniger aus, aber
PHP:
pMalloc->Free((PVOID)pidl);  //pidl freigeben  
pMalloc->Release();
könnte es sein.

Kommentier die beiden mal aus und guck, obs immer noch abstürzt.
 
hab ich schon getan, muss wohl irgendwo im aufruf liegen. Aber ich habe keine Ahnung wo.
 
supi, nach längerem hin und her probieren, hier die zu ändernde Zeile:
PHP:
bi.pszDisplayName = "Speichern unter";

in
PHP:
bi.pszDisplayName = szPath;

weil er in der in bi.pszDisplayName angegebenen Variable die Auswahl speichern will