Tastenbelegung (Shortcuts) zwei mal vergeben
-
Hallo zusammen,
zur Zeit bin ich dabei eine kleine ToDoListe zu programmieren. Das Hauptfenster was von CFrameWnd abgeleitet wurde ist mit hilfe einer CSplitterWnd klasse in zwei Teile gespaltet worden. Auf der linken Seite ist eine CTreeView und auf der rechten Seite eine CListView. Nun würde ich gerne beim drücken auf die Entf-Taste das Item je in welcher View ich bin löschen. Wenn ich also in der CListView bin soll das selektierte Item gelöscht werden, wenn ich aber in der CTreeView bin soll dort die auswahl gelöscht werden.
Wie lässt sich sowas realisieren?
-
Ich würde versuchen, mit GetActiveView und einem dynamic_cast herauszufinden, welcher View das gerade ist und dann die passende Funktion aufrufen.
Leider bin ich mit Splittern nicht so fit.
-
Ich glaube das problem liegt an der weitergabe (routing) der Taste. Wenn diese zuerst an das CListView übergeben wird, reagiert es ja auf alle Fälle auf diese Nachricht, auch wenn es nix tut und somit kommt diese Nachricht nie bei der CTreeView an.
-
Wenn die Nachricht doch schon bei dem betroffenen Control ankommt... wo ist dann das Problem?
-
Eben nicht, diese bleibt anscheinend bei dem CListView hängen. Wenn ich aber in der CTreeView bin und dort Entf drücke passiert gar nichts.
-
Hast du es schon mal im betroffenen View abgefangen?
-
Wie meinst du das genau? Es gibt eine Funktion in beiden View die auf diese Nachricht reagieren.
-
Und die reagieren auch? Weil dann kannst du in genau der Funktion jeweils das Löschen machen.
-
Die Lösung des Problem's ist eigentlich ganz einfach. Für jede View ne eigene Accelatortabelle erstellen, diese dann in den einzelnen View's mit der Funktion LoadAccelerators in der OnInitDialog laden und in der PreTranslateMessage mit ::TranslateAccelerator übersetzen.