Verzeichnis im Dialog eingeben

Super, funktioniert einwandfrei. Naja hat es ja vorher auch, aber jetzt fühl ich mich besser *g*
Vielen Dank für die Hilfe.

Aber noch ne kleine Frage. Ist es möglich ein bestimmtes Verzeichnis bereits vor zu wählen? Also einen Pfad mit übergeben der dann markiert wird? Aber nicht den Root Pfad, der bringt mir nix.
 
Es geht, allerdings muss der Pfad nicht als Klartext übergeben werden, sondern als ominöse PIDL-List. Und da geht das Gewürge dann los. Das war mir dann zu blöd, weil man sich da immer von dem Desktop-PIDL aus runterhangeln muss.

Falls es jemand rausgekriegt hat, ob es da eine einfachere Methode für gibt, dann bitte her damit!
 
Okay, dann lass ich das auch mal draußen. So wichtig ist es eh nicht, da diese Funktion in meinem Programm vlt. einmal im Jahr verwendet wird (wenn's hoch kommt). Vielen Dank für die Antworten!
 
Hallo zusammen, ich musste getz nen Installations Tool schreiben und brauchte doch nen Dialog, in dem man nur Ordner angeben muss...
Und zusaätzlich musste ich noch einen Standard Pfad angeben.
Hier war nix zu finden, hab mich mal schlau gemacht und ein bisle rumprobiert und siehe da es ;))

Das ist jetzt meine Funktion zur Ordner auswahl inkl. Startordner angabe:
Code:
CString CVTBManagerDlg::DetermineInstallPath(void)
{
	char      szTemp[MAX_PATH];

	szTemp[0] = 0;

	BROWSEINFO    bi;
	LPITEMIDLIST  lpiil;

	bi.hwndOwner = GetSafeHwnd();
	bi.pidlRoot = NULL;
	bi.pszDisplayName = szTemp;
	bi.lpszTitle = "Choose the installation path for the Vailoo system!";
	bi.ulFlags = BIF_DONTGOBELOWDOMAIN | BIF_RETURNONLYFSDIRS | BIF_USENEWUI;
	bi.lpfn = NULL;
	bi.lParam = 0;
	bi.iImage = 0;
 //------------------------------------------------------------------------------------------
 //Hier erfolgt die Ordner vorgabe:
	LPITEMIDLIST pidl;
	static TCHAR        szPath[MAX_PATH * 2] = "";

	WCHAR root[MAX_PATH];
	MultiByteToWideChar(CP_THREAD_ACP,MB_USEGLYPHCHARS,"C:\\Programme\\", -1, root, MAX_PATH);

	IShellFolder *psf = NULL;
	SHGetDesktopFolder(&psf);
	psf->ParseDisplayName(bi.hwndOwner,NULL,root,NULL,&pidl,NULL);
	psf->Release();
	bi.pidlRoot = pidl;
 //------------------------------------------------------------------------------------------
	lpiil = SHBrowseForFolder( &bi );

	if ( lpiil != NULL )
	{
		SHGetPathFromIDList( lpiil, szTemp );

		if ( szTemp[strlen( szTemp ) - 1] != 92 )
		{
		wsprintf( szTemp, "%s\\", szTemp );
		}
		LPMALLOC    lpMalloc;
		SHGetMalloc( &lpMalloc );

		lpMalloc->Free( lpiil );
	}
	return CString(szTemp);
}
 
Hallo zusammen,

das ganze funktioniert doch noch nicht so ganz wie ich das will...
Der Dialog wird angezeigt und steht auch auf dem richtigen Ordner den ich angegeben habe.
Nur ist es dann nicht mehr möglich in der Ordnerhierachie höhere Ordner anzugeben!
Heißt soviel wie:
Wenn ich C:\Programme\ übergebe, gibt es keine Möglichkeit für den Benutzer z.B.
D:\Programme\ oder gar C:\Temp\ oder ähnliches anzugeben!
Der übergebene Ordner ist in der Hierachie die höchste Ebene...
Ich weiß nicht woran es liegen kann und frage deßhalb hier danach;))
Ich hätte gerne die komplette Hierachie und nur schon z.B. C:\Programme\ vorausgewählt ...

MFG
RuFF
 
Zuletzt bearbeitet:
Tja, leider ist das das gewollte Verhalten. Da muss man sich schon fast die Gehirnzellen verknoten, um das hinzukriegen.

Bei CodeGuru gibt es eine Wrapperklasse (für MFC), die auch den SHBrowseForFolder-Dialog kapselt und auch mit dessen Messages umgeht. Da könnte man dann einfach in der OnInit... den Aufruf zum Selektieren des Startordners angeben.

Hier der Link:

http://www.codeguru.com/cpp/w-p/files/browserfunctionsdialogs/article.php/c4443/
 

Neue Beiträge

Zurück