Enter in ListView (Fenster ist Dialogbox)



  • Hallo zusammen,

    Ich habe folgendes Problem beim Arbeiten mit Dialogboxen und ListViews.

    Mein Hauptfenster ist ein Dialog, der mit CreateDialog erstellt wurde. Auf diesem Dialog ist u.A. ein Tree und ein ListView, jedoch kein Button. In dem ListView soll wie beispielsweise auch im TotalCommander in einer Ordnerstruktur navigiert werden können. Dabei soll bei Enter eine Funktion etc.
    ausgelöst werden.

    Das Problem ist nun, dass sämtliche Tastennachrichten bis auf Enter über WM_NOTIFY beim Listview ankommen. Bei Enter scheint die Dialogbox-Logik zu greifen, denn es wird ein DM_GETDEFID an das Fenster gesendet.

    Kann man dieses Verhalten irgendwie unterdrücken, ohne auf Dialogboxen verzichten zu müssen?

    Danke, Alex



  • Packe doch einfach deine Behandlung dort hinein und gibt dann 0 zurück. Ansonsten müsstest du wohl das List-View subclassen 🙄



  • Daran hatte ich auch schon gedacht. Das dumme ist nur, dass ich ja nicht mitbekomme, welches Control jetzt gerade aktiv ist. Könnte es höchstens mal versuchen, über GetFocus festzustellen, ob ich im ListView stehe. Es sendet ja jedes Control (Tree, Edit) diese DM_GETDEFID.

    Mit dem Subclassen ist etwas schwieriger. Der Dialog befindet sich samt seiner DlgProc in einer Klasse, wobei DlgProc static ist, damit sie durch CreateDialog verarbeitet werden kann. Den Pointer auf meine Klasse kann ich dabei bei der Anlage mitgeben und komme damit an meine Dialogdaten. Wenn ich mit SetWindowLong den ListView subclasse, kann ich jedoch nichts mitgeben. Der eigenen Fensterabhandlung ist also die Instanz meiner Klasse nicht bekannt. Man könnte natürlich eine selbstdefinierte Nachricht an das ListView schicken, in der man die Instanz als Pointer mitgibt, aber elegant ist das nicht. Gibts da nicht einen anderen Weg?

    Alex



  • Hast du es schon über LVN_KEYDOWN versucht?!

    edit: Habe deinen ersten Post gerade nochmal durchgelesen - war ja das eigentliche Problem 🙄



  • Da du CreateDialog verwendest, scheinst du IsDialogMessage in deine Main-Loop eingebaut zu haben - evtl. einfach vor dem Aufruf auf Enter im List-View checken 🙄



  • Hab das mit der Messageloop gerade mal probiert. Scheint die Lösung meines Problems zu sein. Ich fange die Meldung einfach ab, bevor der Diolog davon überhaupt was mitbekommt. Klingt im nachhinein auch irgendwie einleuchtend.

    Danke für den Tip, Alex


Anmelden zum Antworten