Erweiterung von SHBrowseForFolder
-
Hallo zusammen,
ich benötige einen Dialog, in dem man sowohl Verzeichnisse als auch Dateien auswählen kann. Das hab ich auch hingekriegt mit dem ulFlag BIF_BROWSEINCLUDEFILES im BROWSEINFO Objekt der SHBrowseForFolder Funktion.Was mit jetzt noch fehlt, wäre ein Feld, in das ich einen Pfad einfügen kann, welcher im Fenster mit der Baumstruktur dann übernommen wird. So wie das Adress-Feld im Windows-Explorer. In der Baumansicht wird dann der eingefügte Pfad geöffnet oder zumindest selektiert.
Ich habe bis jetzt leider keine Möglichkeit gefunden, den Dialog von SHBrowseForFolder dahingehend zu modifizieren.
Weiß jemand ob und wie das geht? Oder gibt es eine andere Möglichkeit außer SHBrowseForFolder?
Vielen Dank für eure Hilfe,
markus
-
Ich vermute mal, mit SHBrowseForFolder kommst du da nicht weit. Da müsstest du dir schon was eigenes basteln...
-
Ok, krieg ich irgendwo ein Panel her, welches mein Filesystem als Baum anzeigt, oder muss ich mir das auch selbst basteln?
Danke
markus
-
Such mal nach CTreeView (MFC) bzw. CreateWindowEx mit WC_TREEVIEW.
-
Hast Du schon mal mit BIF_EDITBOX experimentiert?
Evtl. kannst Du über einen simplen Subclass dieses Edit control nutzen. Mit BFFM_SETSELECTION kann man ja gezielt etwas auswählen.
-
Hallo,
erstmal vielen Dank für eure Tipps.
Etwas selbst basteln wird mir zu aufwendig.
Beim zweiten Vorschlag bin ich auch nicht weiter gekommen, weil ich nicht weiß, wie ich eine Änderung in der Editbox (oder die Enter-Taste) abfangen kann, um anschließend den eingegebnen Pfad in der Baumasicht zu selektieren.Wenn noch jemand weiter weiß, bin ich dankbar, ansonsten muss ich mir was anderes überlegen.
Grüße
markus
-
56cent schrieb:
Beim zweiten Vorschlag bin ich auch nicht weiter gekommen, weil ich nicht weiß, wie ich eine Änderung in der Editbox (oder die Enter-Taste) abfangen kann, um anschließend den eingegebnen Pfad in der Baumasicht zu selektieren.
http://blog.m-ri.de/index.php/2008/09/21/die-return-taste-in-dialogen-eine-unendliche-geschichte/
-
Ok, nochmals danke, aber das ist mir zu heavy :-). Da steig ich nicht ganz durch.
Wenn ich das richtig verstanden habe, bräuchte ich fürHWND hWndEdit = GetDlgItem(hDlg,IDC_EDIT1);das Handle auf den Dialog (von SHBrowseForFolder) und den Identifier der Editbox. Woher bekomme ich die beiden Parameter?
Grüße
markus
-
Mit Spy++. Die IDs sind konstant.
-
Sorry, aber sowohl der Dialog als auch die Editbox haben bei jedem Aufruf laut Spy verschiedene Handles. Ich komme leider nicht weiter...
-
Es geht nicht um die Handles, es geht um die IDs!
-
Ok, nach vielem Rumprobieren hab ich es hingekriegt.
Das Subclassing mache ich nachdem der Dialog initialisiert wurde (BFFM_INITIALIZED) in der BrowseCallbackProc, die ich im BROWSEINFO struct der SHBrowseForFolder angeben kann. Weil nur da kenne ich das Handle des Dialogs.Es war ein Kampf aber jetzt funktioniert es.
Danke Martin.Grüße
markus
-
56cent schrieb:
Es war ein Kampf aber jetzt funktioniert es.
Danke Martin.Gern geschehen. Nur so lernt man!