Save As-Dialog



  • Hallo!

    Bin ein absoluter Newbie! 😞
    Könnt ihr mir BITTE helfen?
    Es geht um folgendes Probelm:
    Ich habe eine Reihe von Bilder, die ich bei einer laufenden Messung abspeichern will. Nun soll man den "Start2-Button drücken und ein Save-As-Dialog erscheint.
    Dort soll der Name und der Ordner ausgewählt werden.
    z.b. C:\Bilder\bild.bmp

    Nachdem das aber mehrere Bilder werden soll es später so abgespeichert werden:
    C:\Bilder\bild1.bmp
    C:\Bilder\bild1.bmp
    C:\Bilder\bild1.bmp
    C:\Bilder\bild1.bmp
    ...

    Habe versucht das mit CFileDialog zu machen. Das klappt auch ganz gut NUR:
    ich krieg den File-Titel mit GetFileTitle() und den KOMPLETTEN Pfad mit GetPathName().
    Was ich aber brauche ist NUR den Pfad, also C:\Bilder\.
    Mit GetFolderPath() haut das nicht hin 😞

    Kann mir wer weiterhelfen? Und das ganze auf einem Newbie-Niveau erklären? 🙂

    DANKE!!!!!!!!!!
    Martin



  • Hiho,

    schau Dir mal in der MSDN "SHBrowseForFolder" an. Da bekommst du einen Dialog in dem der User erstmal nur ein Verzeichnis auswählen kannst.

    http://msdn.microsoft.com/en-us/library/bb762115(VS.85).aspx



  • Hallo Hiho!

    Danke für die schnelle Antwort!
    "Leider" muss ich CFileDialog verwenden 😞
    Ich hab grad gelsen, dass ich dieses OFN_EXPLORER setzen muss und dann möcht ich mit GetFolderPath() arbeiten:
    CFileDialog SaveAsDialog(false,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT|OFN_EXPLORER,"Bitmap(.bmp)|.bmp||,this)

    Aber da schmeißts das Programm dann voll bei dem Aufruf:
    CString BildnamemitPfad = SaveAsDialog.GetFolderPath();

    Gibts einen Ansatz für diese CFileDialog-Klasse?

    lg
    Martin


  • Mod

    CFileDialog kann nur Dateien auswählen, wenn es um Pfade geht hast Du eine Anwtort von Hiho!



  • Wie würde es denn funktionieren, wenn ich ich den CString von GetPathName() nehme und den Dateinamen "wegschneide"?


  • Mod

    batman1976 schrieb:

    Wie würde es denn funktionieren, wenn ich ich den CString von GetPathName() nehme und den Dateinamen "wegschneide"?

    Das geht, aber dann kann der User dennoch keinen Pfad auswählen sondern nur eine Datei... Punkt!



  • Dann hab ich mich, denk ich mal, unklar ausgedrückt...sorry...
    der user soll wie beim "normalen" save-as-dialog einen ordner wählen können und einen dateinamen festlegen (inkl. ext).
    z.b.
    C:\bilder\meinbild.bmp

    die bilder entstehen aber bei einer messung und deren name soll "erweitert" werden. also aus mein bild MACHE ICH meinbild1, meinbild2, ...
    der user kegt also nur den ersten teil des files fest!

    eigentlich will ich ja den CString manipulieren...aber dass kann ich auch (noch) nicht 😞

    hast du da tipps?

    p.s.: danke für eure schnellen antworten...ich häng mich eh voll rein, aber es ist sauschwer...



  • Hi,

    sitze gerade nicht an meinem eigenen Computer und kann Dir daher nur so ungefähr beschreiben wie es gehen sollte. Variablen und Funktionsnamen müssen daher nicht unbedingt stimmen. Aber wenn du mit dem Programmieren weiter machen willst lohnt es sich eh sich mal mit der MSDN auseinander zu setzen.

    CString csDirectory = _T( "" );
    if( dlg.DoModal() == IDOK )
    {
       //
       // Hier hat der user den SaveAs Dialog mit Ok beendet.
       // Hier kannst Du dann auf die Member des Dialogs zugreifen
       //
       int iPos = dlg.m_csPathFilename.ReverseFind( _T( "\\" ) );
       //                  ^hier weiss ich schon mal nicht, ob der member genau so
       //                   heisst. Aber irgendeiner der Member enthält den
       //                   kompletten Verzeichnisnamen + Dateinamen
       // Die ReverseFind-Methode sucht halt den letzten Backslash und gibt dir die
       // Position im String an.
       csDirectory  = dlg.m_csPathFilename.Left( iPos );
       // Die Left Methode liefert dir alles im String, links von der Position iPos.
       // Et voilá ... du hast den Verzeichnisnamen in csDirectory stehen.
    }
    

    Kann jetzt noch sein, dass der Index iPos nicht so ganz stimmt ... so von wegen 0 basiert oder 1 basiert zählen und halt der Member vom Dialog anders heisst, aber das bekommst du dann auch noch hin.

    Gruß
    Hiho

    PS:
    der "code" da wird wahrscheinlich so nicht unbedingt kompilierbar sein, sondern soll dir halt helfen.


Anmelden zum Antworten