Standarddialog - CFileDialog Frage



  • Nochmal "Hallo".

    Ich habe ein CFileDialog-Objekt, mit dem ich dem Anwender anbiete, zwischen zwei verschieden Dateitypen (A und 😎 zu wählen und eine Datei zu speichern.
    Als default 'extension' nehme ich A.

    In der Auswahl lässt sich zudem auswählen:
    a) ob Dateien beider Endungen (A und 😎
    b) Dateien mit der Endung A
    c) Dateien mit der Endung B

    angezeigt werden sollen.
    Nun würde ich gerne anhand der Auswahl a) - c) die defaul extension auswählen.
    Weiß aber nicht, wie ich darankomme?
    Habe auch schon eine eigene Klasse von CFileDialog abgeleitet, doch wie komme ich an die entsprechenden Nachrichten oder an die ID der List/Combo-Box, die für die Auswahl zuständig ist?

    MfG,
    Paul.



  • Du willst dass wenn die ComboBox sich ändert auch die entsprechenden Dateien angezeigt werden, oder?
    Das einfachste ist, Du wählst eine File-Mask die das kann...

    A: *.prg_a
    B: *.prg_b
    a+B: *.prg_?



  • Ne, die Daten werden schon korrekt angezeigt. Ich möchte aber gerne anhand des gewählten Eintrags der Combobox die default extension setzen, falls der User vergisst die Datei korrekt zu benennen. 😉



  • Da hier im Forum gerade wenig los ist, pushe ich doch mal meine Frage nach oben.
    😃

    MfG,
    Paul.



  • Geht das nicht über "OFNHookProc";
    vielleicht durch subclassing der ListBox?
    Ressourcen-ID kann man aus der Dialog-Ressource ermitteln.
    Ist vielleicht eine Idee...



  • Bei A und B sollte das doch automatisch gehen, oder?
    Und bei C musst du dir den Dateinamen nehmen und das selber ankleben (oder bei A und B auch). 🙂

    Ich habe gerade nix, wo ich das mal testen könnte...



  • @RR: Danke für die Hinweise, aber ich habe einige Probleme:

    1. Wenn ich doch nur ein CFileDialog-Objekt benutze, dann steht doch nichts in der Ressourcendatei?!?
      2)subclassing der ListBox: Wie kann ich das bewerkstelligen? dazu muss ich doch irgendwie an die ListBox (oder ComboBox) herankommen?
      3)OFNHookProc: damit weiß ich leider noch nicht viel anzufangen. Scheint aber ein zu großes Unterfangen zu sein, als dass sich der Aufwand wirklich lohnen würde.
      😉

    @estartu:
    Verstehe dich nicht? Was meinst du mit A, B und C? Die extensions oder meine a),b) ,c)-Aufzählung?
    Das mit dem Anzeigen der Daten ist nicht das Problem, bloß die automatische Zuweisung der richtigen Endung, wenn der User a),b) oder c) auswählt ist für mich nicht so trivial. 🙂
    Da ich ja herausbekommen müsste, welche Auswahl der User getroffen hat.



  • Die Common-Dialoge sind in Dlls eingebunden. Diese Dlls kann man in VC als Ressource öffnen und den entsprechenden Dialog suchen.
    OfnHookProc ist nicht weiter tragisch. Du bekommst dann bestimmte Nachrichten, wie z.B. "WM_INITDIALOG" mit. Hier kannst du die HWND des Dialogs ermitteln. Dann hast Du praktisch Zugriff auf alle Elemente.
    Du kannst "OFNHookProc" als Extern "C" in der abgeleiteten Kalasse einbauen. Die MSDN-Library hilft Dir bei Einzelheiten weiter.



  • Hört sich interessant an. Das mit der dll wusste ich nicht, mal sehen, ob ich damit klarkomme. Die OFNHookProc-Funktion bin ich in der MSDN nur kurz überflogen. 😉
    Ich versuche es mal mit der dll/Ressource.
    Danke.



  • Paul_C. schrieb:

    Verstehe dich nicht? Was meinst du mit A, B und C? Die extensions oder meine a),b) ,c)-Aufzählung?

    Die Aufzählung. Sorry, hab nicht dran gedacht, dass du Kleinbuchstaben hattest.

    Das mit dem Anzeigen der Daten ist nicht das Problem, bloß die automatische Zuweisung der richtigen Endung, wenn der User a),b) oder c) auswählt ist für mich nicht so trivial. 🙂
    Da ich ja herausbekommen müsste, welche Auswahl der User getroffen hat.

    Da kommt ins Spiel, dass ich vermute, dass es bei a und b automatisch angehängt wird. 😉

    Ich guck grade mal in die MSDN: Funktioniert GetFileExt nur für Öffnen?
    Und dann habe ich gerade noch OnTypeChange entdeckt, das könnte was für dich sein. 🙂



  • Der Dialog hat ein Element m_ofn, in dem noch ein paar zusätzliche Informationen drinstehen - z.B. gibt nFilterIndex den Index des verwendeten Filters (ab 1, 0 steht für User-Filter) an.



  • Oh ich sehe in CFileDialog ist das alles ja schon vorhanden, man braucht keinen Hook. Bin eigentlich eingefleischter API-Fan und habe das jetzt noch gar nicht gewußt ...



  • @estartu:

    Da kommt ins Spiel, dass ich vermute, dass es bei a und b automatisch angehängt wird. 😉

    Ich guck grade mal in die MSDN: Funktioniert GetFileExt nur für Öffnen?
    Und dann habe ich gerade noch OnTypeChange entdeckt, das könnte was für dich sein. 🙂

    Nee, leider wird es nicht automatisch angehängt. Dafür kann man ja mit Hilfe von m_pOFN (bei mir gibt es kein m_ofn?!?) die default extension setzen.
    OnTypeChange() habe ich bisher nicht genutzt, da ich nicht das OFN_EXPLORER-Flag nutze.

    @CStoll:

    Der Dialog hat ein Element m_ofn, in dem noch ein paar zusätzliche Informationen drinstehen - z.B. gibt nFilterIndex den Index des verwendeten Filters (ab 1, 0 steht für User-Filter) an.

    Das könnte tatsächlich das Gesuchte sein. Werde ich gleich mal ausprobieren.

    Danke nochmals. Werde mich gleich nochmal melden, ob es geklappt hat. 🙂



  • Ok, nFilterIndex gibt die Position an! 🙂
    Somit kann ich dann per Hand, falls keine extension vom User angegeben wurde, anhand des Index anhängen.

    Danke für die ganzen Antworten! 😉
    Ist mir nur ein Rätsel, warum ich das die ganze Zeit nicht gesehen habe. Habe mir schön öfter die Struktur angesehen... 🙄

    Ich seid spitze!

    MfG,
    Paul.
    😉

    EDIT: @RR: du kannst mir nicht aus Interesse mal genau erklären, wie ich die Ressource eines Common-Dialogs lade? Nach welcher dll muss ich denn suchen?



  • Die Common-Dialoge sind in Dlls eingebunden. Diese Dlls kann man in VC als Ressource öffnen und den entsprechenden Dialog suchen.

    Toller Tipp!
    Das mit der DLL für den CFileDialog würde mich auch interesieren.
    Nur leider finde ich die richtige DLL nicht. Ich hatte erst commdlg.dll bzw. comdlg32.dll vermutet, aber die sind es nicht. Und irgend was mit explorer auch nicht.
    Die IDs sind übrigens in der MSDN unter "Open and Save As Dialog Boxes" erklärt.

    Tester2



  • Die Ressourcen sind in der Datei "Comdlg32.dll".
    ResID: 1537
    Unter WinXP. Die ResIDs dürften aber in den verschienden Win-Versionen gleich bleiben (muß aber nicht).
    Es gibt auch tolle Freeware-Ressourcen-Betrachter.
    Aber unter VC ist das auch möglich wenn man bei Öffnen-Als-Dialog auf öffnen als Ressourcen.



  • Hey, super, danke. Aber man sollte lieber alles Dateien anzeigen lassen, denn sonst wird die dll herausgefiltert. 😉
    Gut zu wissen, dass soetwas möglich ist.

    MfG,
    Paul.


Anmelden zum Antworten