CFileDialog Problem



  • In einem meiner Dialogfenster können 2 CFileDialoge zum Auswählen bestimmter Dateien geöffnet werden.

    1.:

    CString strFilter = _T("mac-Dateien (*.mac)|*.mac");	
    CString strName = "";						
    
    CFileDialog DateiDialog (TRUE, "", strName, OFN_CREATEPROMPT | OFN_EXPLORER | OFN_OVERWRITEPROMPT | OFN_HIDEREADONLY, strFilter);
    

    2.:

    CString strFilter = _T("exe-Dateien (*.exe)|*.exe|com-Dateien (*.com)|*.com||");
    

    Nun ist das Problem, dass sich das Programm anscheinend meinen Wert für den strFilter merkt, das heißt wenn ich den ersten CFileDialog aufrufe und danach den 2., dann kann ich sowohl *.mac, als auch *.com-Dateien auswählen.

    Das möchte ich aber nicht! Wie kann ich das vermeiden?



  • Üblicherweise einfach zwei verschieden CFileDialog Objekte.

    void myfunc()
    {
      {
        CFileDialog fd(...);
        fd.DoModal();
      }
    
      {
        CFileDialog fd(...);
        fd.DoModal();
      }
    }
    

    oder

    {
    	CFileDialog fd(true,"","",0,"Exe|*.exe|");
    	fd.DoModal();
    
    	fd.m_ofn.lpstrFilter = "Dll\0*.dll\0";
    	fd.DoModal();
    }
    

    Bei der 2. Methode wird aber z.B. der Dateiname von Dialog 1 mit übernommen (da in m_ofn gespeichert)



  • Danke für die Antwort! 😃

    Mensch, das ist ja kurios. Wenn ich im Nachhinein mit:

    DateiDialog.m_ofn.lpstrFilter = "mac-Dateien (.mac)\0.mac\0";

    den Filter setze, dann funktioniert es.
    Wenn ich es wie zuvor beschrieben mache, dann übernimmt er einfach den 2. Eintrag vom ersten Filter. Komisch!



  • Weil du vergessen hast, den String mit '||' abzuschliessen.


Anmelden zum Antworten