Verzeichnispfad - Button durchsuchen

Maggio

Grünschnabel
Hallo Forum,

Ich habe in meiner Anwendung die Option Datei - Speichern
Im ersten Anlauf speichert das Programm seine Daten einfach im Programmverzeichnis
Im zweiten Anlauf habe ich dann (danke nochmal an McCoder) herausgefunden, wie ich unter Eigene Dateien speichern kann

Jetzt möchte ich das Ganze gerne erweitern, und dem User die Option "Speichern unter..." anbieten, aber ich habe überhaupt keinen Plan wie
Gibt es eine vorgegebene API Funktion, für einen "durchsuchen" - Button und wenn ja, wie funktioniert das, oder muss ich die ganze Funktion selber basteln?

Ich weiss nicht mal, nach welchem Stichwort ich bei MSDN suchen sollte

Danke im voraus
Maggi
 
Diesen Code muss du in eine OnClick Methode auf deinem Dialog einbinden!

Code:
CFileDialog fileSaveDlg( FALSE, 
                         NULL, 
                         NULL, 
                         OFN_FILEMUSTEXIST | OFN_HIDEREADONLY, 
                         _T("Alle Dateien (*.*)|*.*||") ); 

    if(fileSaveDlg.DoModal()==IDOK) //hier mit prüfst du wie das dialog verlassen wurde, //wenn man speichern untern gedrückt hat dann gibt es IDOK zurück
{
        strOutputFilePath=fileSaveDlg.GetFileName();
    }

Viel erfolg
 
Also entweder verstehe ich völlig Bahnhof, oder du bist mir einen Schritt voraus

Was ich machen muss, wenn der User den Dialog verlassen hat war nicht die Frage, ich muss zuerst mal überhaupt den Dialog erstellen und die Frage war, gibt es dafür etwas Fertiges, oder muss ich das komplett selben bauen?

Genau genommen brauche ich überhaupt keinen Dialog, ich brauche nur einen Durchsuchen - Button, wo der User ein Verzeichnis auswählen kann und meinem Programm der ausgewählte Pfad zurückgegeben wird, das was da gespeichert wird ist vom Programm vorgegeben, selbst der Dateiname ist vorgegeben, ich möchte nur das Verzeichnis wählbar machen

WENN es in der API etwas Fertiges gibt, dann müsste das so aussehen

DurchsuchenButton = CreateWindow(?);
 
Also dafür kannst du einfach einen neuen Workspace anlegen. Nutze dazu die vorgefertigte MFC. Damit kannst du es dir gestalten wie du möchtest
 
Ich weiss nicht, bin ich nun doof, oder habe ich die Frage schlecht gestellt, oder was?

Die Frage ist:
Gibt es etwas Fertiges in der API und wenn ja, wie funktioniert das?
Zusatz:
Ich weiss nicht mal, nach welchem Stichwort ich bei MSDN suchen sollte

Mit der Antwort:
Nutze die vorgefertigte MFC
kann ich dabei herzlich wenig anfangen

Mal abgesehen davon, dass ich nicht mit Visual C arbeite sondern API plain

Habt Erbarmen und gebt mir eine Antwort, die auch ein Anfänger versteht
 
Hi, Antwort #2 von Winner ist schon richtig.
Du hast deinen Button. Dort fügst du einen Handler für das Mausklick-Ereignis ein. Das geht so:

deinen Button markieren,
rechte Maustaste, Ereignishandler hinzufügen,
Meldungstyp BN_CLICK auswählen,
"Code bearbeiten" drücken,
Code aus Antwort #2 in deinen Code reinkopieren.
Fertig.
Hinter dem Code kannst du noch strOutputFilePath auswerten.
Ömpf, erst jetzt sehe ich, dass du gar kein Visual C++ hast. Na ja, irgendetwas ähnliches wirds vielleicht auch bei dir geben.
 
Zuletzt bearbeitet:
So langsam glaub ich dann ich bin wirklich zu doof

Wenn ich mit CreateWindow() einen Button erstelle, dann hat dieser zuerst mal überhaupt keine Funktion, er hat keine Resourcen und CFileDialog existiert nicht

Wenn ich dann dort das Event für Click einfüge, dann muss sich ein Dialog öffnen im Stil des Windows Explorer wo der User das Verzeichnis auswählen kann
Nach Auswahl muss der Dialog mir den Pfad des ausgewählten Verzeichnis zurückgeben, aber so weit bin ich ja noch gar nicht, ich muss im ersten Schritt mal wissen, wie der Inhalt der Klammer von CreateWindow() aussehen muss, bzw. wie ich in API plain eine Resource für CFileDialog definieren kann

Noch genauer genommen brauche ich nicht mal die Definition für den Dialog, denn wenn ich ihn zu Fuss bauen muss, dann lasse ich das lieber erstmal
Die Frage war, ob es in der API einen vorgefertigten Dialog gibt, so wie z.B.

CreateWindow("edit" .........);

automatisch ein Eingabefeld erzeugt, für das es dann weitere vorgegebene Events wie z.B. WM_CTLCOLOREDIT gibt
 
Zurück