Wieder der Verzeichnis Dialog


  • Mod

    CStoll schrieb:

    (Stichwort: Kristallkugel)

    Meine steht auf dem Fensterbrett aber zeigt nichts...
    Ja. Ehrlich ich habe eine! Die hat mir mal ein Programmierer-Kollege (in Memoriam Carsten Witte) zu Weihnachten geschenkt, damit ich nicht mehr sagen kann "Meine Krsitallkugel ist kaputt/in Reparatur/etc." :xmas1: :xmas2:



  • hmpf stimmt

    Ich bin in die FAQs gegangen und hab da diesen Code gefunden
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-39127-and-highlight-is-directory.html
    , der den Verzeichniswahldialog aufrufen soll, hab ihn dreisterweise kopiert und über 30 Fehler erhalten

    Ich würds gerne mit SHBrowseForFolder machen, weil ich schon einen Großteil vom Code habe, aber das Programm gibt immer einen read-error aus. Muss ich irgendwo die max. Größe des Rückgabestrings angeben?



  • MAX_PATH hat als Größe von returnedString[] nicht den erhofften erfolg gebracht.
    Ich bin verzweifelt!!! 😞

    hier die Kristallkugel

    char									returnedString[MAX_PATH];
    	BROWSEINFO	browseinfo;
    			browseinfo.hwndOwner		=	m_hWnd;
    			browseinfo.pszDisplayName	=	returnedString;
    			browseinfo.lpszTitle		=	"Wählen Sie einen Ordner";
    			browseinfo.ulFlags			=	BIF_EDITBOX;
    
    	SHBrowseForFolder(&browseinfo);
    

    Liegts am m_hWnd



  • RobthaR schrieb:

    Liegts am m_hWnd

    Es liegt wohl eher daran, dass du wahllos Code aus dem Beispiel entfernt hast. Diese Zeile ist recht wichtig:

    ZeroMemory ( (PVOID) &bInfo,sizeof (BROWSEINFO));
    


  • Danke, es funktioniert

    Außerdem hab ich nicht kopiert, ich hab nur den Namen SHBrowseForFolder gesehen und im MSDN nachgeschaut

    ZeroMemory kenn ich garnich, wofür is die gut?



  • Schonmal

    RobthaR schrieb:

    im MSDN nachgeschaut

    ?



  • ich benutz lieber "SecureZeromMemory(..)"



  • ARG 😡
    Warum zur Hölle gib eine Funktion, die dazu da ist, einen Ordner auszuwählen, den Namen und nicht den Pfad an, wie sinnlos ist das denn

    Wie kann ich den ganzen Pfad auslesen
    (also nicht Debug sondern C:\...\...\Debug)



  • void CProjRenameDlg::OnBnClickedPath()
    {
        BROWSEINFO bi;
        memset( &bi, 0, sizeof( BROWSEINFO ) );
        bi.hwndOwner = AfxGetMainWnd()->GetSafeHwnd();
        bi.lpszTitle = "Bitte wählen Sie ein Verzeichnis...";
        bi.ulFlags = BIF_RETURNONLYFSDIRS | BIF_NEWDIALOGSTYLE;
    
        ITEMIDLIST* pList = SHBrowseForFolder( &bi );
        if( pList )
            {
                char szFolder[MAX_PATH+1]="";
                if( SHGetPathFromIDList( pList, szFolder) ) 
    				m_strPath = szFolder; //m_strPath = CString-Element
    
                LPMALLOC pMalloc=NULL;
                if( S_OK == SHGetMalloc( &pMalloc ) )
                    {
                        pMalloc->Free( pList );
                        pMalloc->Release();
                    }
            }
        CoUninitialize();
    
    	UpdateData(false);
    }
    

    Ich nutze das hier und das geht recht gut. Allerdings nutz ich das nur zum Pfad-ermitteln. (Ist ein Teil aus dem FAQ)

    In Eigener Sache:
    Wenn einer weiß,wie ich das nicht per Aufruf sondern Statisch erstellen kann (im Fenster enthalten) dann wäre ich sehr dankbar.



  • Alles klar, SHGetPathFromIDList hats gebracht

    @Uruk-h4j: Vielleicht kannst du es mit einer Tree View und einem CFileFinder machen, der rekursiv sucht

    http://www.c-plusplus.net/forum/viewtopic-var-t-is-39130.html

    So würde !ich! es angehen


Anmelden zum Antworten