Folder grafisch wählen

Coalminer

Mitglied
Hallo,

ich suche eine Möglichkeit wie man möglichst grafisch in Visual C++ und MFC ne Auswahl für einen Folder realisiert.

Wir kennen ja alle die Klasse CFileDialog.
Nur leider liefert diese Klasse nur dann was zurück wenn man eine Datei damit auswählt.
Generell könnt ich jetzt hergehen und mir über GetPathName den kompletten Pfad geben lassen und die Dateibezeichnug am Ende abschneiden.

Das wäre dann aber schon sehr grob an dem vorbeigearbeitet was ich eigendlich will.
Ich möchte eigendlich nen grafischen Verzeichnissbaum aus dem ich einen Pfad grafische wählen kann und eben keine Datei.
Bei vielen Installern is sowas ja drin. Such jetzt ne einzelen Klasse für sowas.
Weiss mir da jemand was ?

Am ende soll halt n String rauskommen der ne Pfadangeabe enthält.
 
moin


Ich verstehe nicht richtig wie das dann aussehen soll!

So in der Art wie der Windows Explorer?
Wenn nciht dann mach mal ne Skizze.


mfg
umbrasaxum
 

Anhänge

  • Unbenannt.JPG
    Unbenannt.JPG
    23,9 KB · Aufrufe: 66
es sollte dem auf dem unteren bild schon sehr ähnlich sein
das oben von dir wär auch ok
wie bei nem installer bei dem man den pfad wählt

wichtig is halt das man damit nen Folder und somit nen Pfad,
und eben nicht ne einzelne Datei auswählt
 

Anhänge

  • Tree.gif
    Tree.gif
    4,1 KB · Aufrufe: 62
Zuletzt bearbeitet:
Code:
 	BROWSEINFO bi;
  	LPITEMIDLIST pidl;
  	char displayname[MAX_PATH]; 
  
  	bi.hwndOwner      = GetSafeHwnd();
  	bi.pidlRoot       = NULL; 
  	bi.pszDisplayName = displayname;  
  	bi.lpszTitle      = NULL; 
  	bi.ulFlags        = BIF_RETURNONLYFSDIRS;
  	bi.lpfn           = NULL;           
  	bi.lParam         = 0;    
  	bi.iImage         = 0;    
  	pidl = SHBrowseForFolder(&bi); 
  
  	if (pidl) {                                   
  	   SHGetPathFromIDList(pidl, displayname);   
  	}

Wenn ein Ordner ausgewählt wurde, findest Du den Pfad in displayname.
 
Bemerkung:

Die ID-List muss wieder freigeben werden. Einfach nach SHGetPathFromIDList folgendes einsetzen:

Code:
    LPMALLOC    lpMalloc;
    SHGetMalloc( &lpMalloc );

    lpMalloc->Free( lpiil );
 
ein Frage fällt mir dann doch noch dazu ein
der Pfad wird wie in Windows üblich mit Backslashes als Trennzeichen in displayname gespeichert.

gibts in der mfc nen fertieg Funktion zum Umwandeln von Pfadangaben, bei der die Backslashes in Slashes umgewandelt werden.

Kann mir natürlich schnell selber was schreiben - aber wenns da schon was gäb wär das natürlich die elegantere und einfachere Veriante
 
Zurück