Was änliches wie CFileDialog



  • das würde mich auch mal interessieren.. Wenn ich das Prinzip richtig verstanden habe, könnte ich doch in der Struktur BROWSEINFO den Wert für pidlRoot vorbelegen. Wie ich die Pidl für spezielle Ordner herausbekomme ( z.B. Desktop, etc.. ) meine ich auch irgendwo herausgefunden zu haben. Wie ich diese allerdings zu einem bestimmten Ordner ermittle ist mir nicht klar..

    Weiss jemand Rat?



  • Pointer to an ITEMIDLIST structure (PIDL) specifying the location of the root folder from which to start browsing. Only the specified folder and any subfolders that are beneath it in the namespace hierarchy will appear in the dialog box. This member can be NULL; in that case, the namespace root (the desktop folder) is used.

    Ok, wenn nur DIESER Ordner und alle Unterordner angezeigt werden, hilft mir das ja auch nicht weiter...

    Gibt es eine andere Möglichkeit?



  • wenn du etwas ähnlich wie CFileDialog suchtst , dann baue die ne klasse , erbe von CFileDialog und überschreibe ein paar passende fkt.



  • Schaut doch bitte mal in FAQ, das kann nicht Schaden ! 🙄

    Devil



  • naja das mit der funktion oben ist schon gut so.
    aber ich möchte nur das der lätzte phad beim neu öffne gleich wider offen ist.

    MFG TaccoGo



  • dito



  • Es ist ja nicht so, dass ich die ganzen Hilfen nicht schon durchforstet hätte.. Mein Problem ist einfach, dass ich mittels CFileDialog keine Ordner auswählen kann. Das Vorbelegen ist hier nicht das Problem. Auf der anderen Seite kann ich beim SHBrowseForFolder nicht sagen, welcher Ordner geöffnet werden soll...

    Richtig?

    Christian
    (Vormals Wissbegieriger)



  • genau wen man mit CFileDialog orndner öffnen könnte wer das kein proplem.
    aber da das nicht get der code oben.

    aber wie forbelegen in den FAQ habe ich auch plos was zum CFileDialog gefunden.

    MFG TaccoGo



  • hy ,

    was meinst du mit :
    ..mit CFileDialog orndner öffnen könnte..
    du willst keine datei wählen , richtig ? warum soll das denn nicht gehen ?



  • Naja, wenn man im CFileDialog auf öffnen klickt, wird nicht der Ordner ausgewählt... Ein Flag kann ich nirgends setzen um das umzustellen (jedenfalls finde ich es nicht).



  • bei CFileDialog wirt immer nur eine datei ausgewält

    MFG TaccoGo



  • @Little_Bird :
    es ist zwar richtig dass beim öffnen klicken normalerweise ein file gewählt sein muss aber , du kannst doch selbst bestimmen was er bei OnOK() machen soll
    der ordner steht doch als file da , musst nur den string kürzen..
    (substring usw.)

    @TaccoGo: da gibt es sowas wie allowmultiselect oder ähnlich .. damit kann man mehrere dateien gleichzeitig öffnen



  • ich möchte auch nur den ordner.

    das mit den strin kürtzen get aber nicht den ok zu kliken muss ich eine datei wälen aber in den ortner sind nut wietere ortner und keine dateien.

    MFG TaccoGo



  • Hallo WuTangl!

    Erstmal vielen Dank für Deine Bemühungen!

    Den String würde ich ja kürzen, davon bekäme der Benutzer ja nix mit --> Es geht aber nicht, dass der Anwender des Programms eine Datei auswählen muss, wenn er doch eigentlich einen Ordner auswählen soll. Immerhin gibt es auch Ordner, in denen zunächst einmal keine Dateien sind..

    Nein, das ist keine Lösung.



  • Hallo,

    kent keiner ne lösung vür das problen???? 😕 😕

    ich habe in der BROWSEINFO striktur den pidlRoot wert versucht zu fülle aber das klapt nicht gans.

    MFG TaccoGo



  • Guten Morgen TaccoGo !

    Folgendes: Ich habe es jetzt geschafft den Wert für pidlRoot mit meinen gewünschten Ordner vorzubelegen. ( Über das das IShellFolder-Interface mit ParseDisplayName() [siehe hier]).

    Nur ist das nicht ganz was ich mir vorgestellt hatte... denn so kann man in der Verzeichnisstruktur nur noch unterhalb des vorbelegten Ordners browsen ( ist ja auch logisch, wenn der als Root festgelegt wird ).

    Also der Weg muss über den CFileDialog gehen. Und hier gibt es mit Sicherheit auch eine Lösung, denn wenn ich mit dem Studio ein neues Projekt anlege, muss ich mit eben diesem Dialog auch einen Ordner auswählen - da geht das also ganz wunderbar.

    Kann doch nicht angehen, dass das keiner hier weiss 😃 😉

    so long, Christian



  • nun werde ich dan mal nach möglichkeiten in CFileDialog suchen.

    wen du oder irgendjemand was raus findet schreibt bitte.

    MFG TaccoGo



  • Hy ,
    mittels CFileDialog ist es def. nicht möglich(es gibt dort keine flags) ...
    Also der ansatz muss mittels SHBrowseForFolder gehen ..



  • Hallo,

    SHBrowseForFolder benutze ich ja schon aber da kann ich doch nichts einstelen oder?

    void COberflche_alkDlg::OniFldPfad() 
    {
    	// TODO: Code für die Behandlungsroutine der Steuerelement-Benachrichtigung hier einfügen
    	// verzeichnis auswahlen für zubearbeitende projekte
    
    	BROWSEINFO bi = { 0 }; 
    	bi.ulFlags=BIF_EDITBOX;
    	bi.lpszTitle = _T("Bitte wählen Sie das gewünschte Verzeichnis :"); 
    	LPITEMIDLIST pidl = SHBrowseForFolder (&bi); // HIER
    	if (pidl != 0) 
    	{ 
    		TCHAR path[MAX_PATH];
    		if (SHGetPathFromIDList(pidl, path)) 
    		{ 
    			m_iFld.Format("%s",path);
    			char inBuf[255];
    			Oeffnen(inBuf);
    			m_ausg="";
    			UpdateData(FALSE);
    		} 
    		IMalloc * imalloc = 0; 
    		if (SUCCEEDED(SHGetMalloc(&imalloc))) 
    		{ 
    			imalloc->Free (pidl); 
    			imalloc->Release(); 
    		} 
    	}
    }
    

    MFG TaccoGO



  • Endlich, ich habs raus ! (Puh ... *SchweissVonDerStirnWisch*)

    Also: Du setzt für lpfn der BROWSEINFO-Struktur die Adresse zu einer CallBackFunktion (mit folgendem Aufbau):

    int CALLBACK BrowseCallbackProc(HWND hwnd,UINT uMsg,LPARAM lParam,LPARAM lpData)
    {
    	//Hier wird die Selektion im Tree gesetzt
    	if (uMsg == BFFM_INITIALIZED)
    	{
                  SendMessage(hwnd, BFFM_SETSELECTION, FALSE, lpData); 
    	}
    	return FALSE;
    }
    

    Ausserdem hat die BI-Struktur noch einen lParam-Wert, dem Du deinen pidl übergibst.

    So wird, nachdem Der BFF-Dialog initialisiert ist, eine Nachricht an den Dialog gesendet, der Dir Deinen Pfad auswählt. 👍

    Geil, was 😃

    [Edit]
    Siehe auch hier und hier


Anmelden zum Antworten