Frage zu CFileDialog



  • Hallo an alle,

    ich sitz gerade an einem Programm, in dem ich CFileDialog zum Öffnen einer Datei nutze. Die Anwendung bildet das GUI zu einem OpenCv Algorithmus. Jetzt weiss ich nicht so recht, wie ich die Datei öffnen soll bzw. ob meine Variante technisch ok ist:

    class CVideo
    {  
       ...
       public: 
         bool setCaptSourceVideo(const string& fileName)
         {
            // ... Überprüfung ob Source Video == NULL, etc      
            SourceVideo = cvCreateFileCapture(fileName.c_str());
            ...
         }
       private:
         CvCapture* SourceVideo;
       ...
    }
    class CUserData
    {
       ...
       public:
         bool setCaptSourceVideo(const string& fileName)
         {
            fileName.setCaptSourceVideo(fileName);
         }
       private: string fileName;
       ...
    }
    ...
    string strPathName;
    
    // File Dialog mit Filter (*.avi)
    CFileDialog fileDialog(TRUE, NULL, NULL, NULL, "Video Files (*.avi)|*.avi||");
    
    if(fileDialog.DoModal()==IDOK)
    {
       // Pfad\Dateiname ermitteln
       strPathName = fileDialog.GetPathName();
    
       // An dieser Stelle muss noch eine Funktion eingefügt werden, welche mir den 
       // von GetPathName() zurückgegebenen Wert umwandelt. D.h.: von
       // "C:\videos\vid1.avi"   in    "C:\\videos\\vid1.avi".
    
       if(CUserData.setCaptSourceVideo()==FALSE)
           MessageBox("Datei konnte nicht geöffnet werden!", MB_OK, 0)
    
    }
    

    Bitte schaut mal drüber und teilt mir mit was ihr davon haltet und ob diese Variante in Ordnung ist, bzw. wie ihr die Sache lösen würdet.
    MfG



  • andi0815 schrieb:

    // An dieser Stelle muss noch eine Funktion eingefügt werden, welche mir den
    // von GetPathName() zurückgegebenen Wert umwandelt. D.h.: von
    // "C:\videos\vid1.avi" in "C:\\videos\\vid1.avi".

    was soll das, du kannst die variable direck verwenden den doppelten backslash nimmt man nur wenn man eine pfadangabe in einem string selbst erstellt.



  • Des weiteren was ist mit der Klasse

    class CUserData
    {
       ...
       public:
         bool setCaptSourceVideo(const string& fileName)
         {
            fileName.setCaptSourceVideo(fileName);  //?
         }
       private: string fileName;
       ...
    }
    

    Du übergibst fileName und hast ne Menbervariable fileName das kann schon mal irgendwie nicht gut gehen und seint wann hat string nen Memberfunktion setCaptSourceVideo()? Bei dem was du da gepostet hat kann dir doch keiner sagen ob das sinn macht oder nicht, da man die zusammenhänge doch nicht erkennt.
    Dann gibt es beim Filelanden plötzlich einen Member CUserData was gleichzeitig eine Klasse ist, dein Code sieht aus als hättest du den nur in der Theorie geschrieben, aber noch nie compiliert.

    Aber vielleicht Irre ich mich und seh nur die zusammenhänge nicht



  • War ein Tippfehler. Ich nutze zwei verschiedene Rechner. Einen zum Entwickeln und den anderen zum surfen. Die Klasse CUserData sieht folgendermaßen aus:

    class CUserData
    {
       ...
       public:
         bool setCaptSourceVideo()
         {
            fileName.setCaptSourceVideo(fileName);
         }
       private: string fileName;
       ...
    }
    


  • Und noch ein Tippfehler, so muß es aussehen:

    class CVideo
    {
    ...
    public:
    bool setCaptSourceVideo(const string& fileName)
    {
    // ... Überprüfung ob Source Video == NULL, etc
    SourceVideo = cvCreateFileCapture(fileName.c_str());
    ...
    }
    private:
    CvCapture* SourceVideo;
    ...
    }
    class CUserData
    {
    ...
    public:
    bool setCaptSourceVideo(const string& fileName)
    {
    Video.setCaptSourceVideo(fileName);
    }
    private:
    string fileName;
    CVideo Video;
    ...
    }
    ...
    string strPathName;

    // File Dialog mit Filter (.avi)
    CFileDialog fileDialog(TRUE, NULL, NULL, NULL, "Video Files (
    .avi)|*.avi||");

    if(fileDialog.DoModal()==IDOK)
    {
    // Pfad\Dateiname ermitteln
    strPathName = fileDialog.GetPathName();

    if(CUserData.setCaptSourceVideo()==FALSE)
    MessageBox("Datei konnte nicht geöffnet werden!", MB_OK, 0)

    }



  • 1. CUserData.setCaptSourceVideo() fehlt der parameter
    2. string fileName; warum deklarierst du das, wenn du die variable nicht expliziet brauchst, sie ist für die parameterübergabe überflüßig

    3. warum gehst du den umweg über die klasse CUserData und nicht direkt auf CVideo



  • Hallo,

    1. return gehört natürlich rein:

    [Code]
    bool setCaptSourceVideo(const string& fileName)
    {
    return Video.setCaptSourceVideo(fileName);
    }
    [\Code]

    2. Hast recht, ist ja als Member vorhanden. Werde ich noch ändern in:
    CUserData::setCaptSourceVideo();

    3. Die Klasse CUserData enthält noch andere Daten, sie soll eine einheitliche Schnittstelle
    darstellen. Die Daten die darin gesammelt werden, werden im Anschluß als Objekt an einen
    Algorithmus übergeben. Praktisch kapselt CUserData das SourceVideo Objekt ab und reicht
    sämtliche Methoden an dieses Objek


Anmelden zum Antworten