Accelerator für mehrere Fenster



  • Hallo zusammen,

    wie kann man den Shortcuts für mehrere Fenster erstellen?

    Beispiel Visual Studio:
    Ist der TextEditor aktiv, zeigt das Menü "Lesezeichen" die Taste F2 für "nächstes Lesezeichen" an.
    Ist aber der Projektmappen-Explorer aktiv, zeigt das Menü "Lesezeichen" die Taste Strg+K,Strg+N für "nächstes Lesezeichen" an. Die Taste F2 ist dann für "Umbenennen" aktiv im Projektmappen-Explorer.

    Weiss jemand wie so was geht??

    Danke


  • Mod

    Jedes Fenster/Document hat seine eigene Accelerator Table.

    Das kann man über PreTranslateMessage realisieren oder noch einfacher mit CDocument::GetDefaultAccelerator.

    Hmmm. Genau zu dem Thema habe ich gerade einen Artikel in der Pipeline für meinem Blog... 😉



  • Den Anfang deiner Pipeline habe ich gelesen, deswegen bin ich auch drauf gekommen.
    Dann wart ich mal, bis dein Artikel voll den weg aus der Pipeline gefunden hat. 😋


  • Mod

    Schau Dir einfach mal detailiert diese CDocument::GetDefaultAccelerator Funktion an. Gar nicht schwer zu verstehen...
    Eigentlich besteht mein Artikel mehr oder weniger darauf diese "missachtete" Funktion etwas mehr ins Blickfeld zu rücken... HTH



  • Habe ich mir schon angeschaut!

    Nur in meinem Fall, bleibt das CDocument immer gleich, nur die Ansichten ändern sich.
    Ich denke, ich muss für jedes Fenster, was auf eigen Accelerators reagieren soll, eine eigen Tabelle laden und dann in jedem Fenster PreTranslateMsg auswerten.

    Ist das soweit Richtig?


  • Mod

    Richtig. Du kannst ja pro View auch einen Accelerator laden und dann diesen bei Bedarf (Keyboard Message) in PreTranslateMesage des CView anwenden...



  • Kannst du mir dein letzten Vorschlag ein wenig verdeutlichen, ich habe das jetzt nicht ganz verstanden, wie du das meinst!?!


  • Mod

    1. Du legst einenen Member vom Typ HACCEL in Deinem View an
    2. Du lädst diesen Accelerator im OnCreate oder im Konstruktor der Klasse
    3. Du baust einen PreTranslateMessage ein prüfst ob die Nachricht eine Keyboard Nachricht ist und wenn ja führst Du TranslateAccelerator aus.

    Langt das?



  • Ja, Danke, hatte es ja so vor, nur das mit der (Keyboard Message) hat mich verwirrt!
    Sorry und Danke für die schnelle Hilfe.



  • Ein Problem habe ich noch bei der Sache:

    Hat das Fenster den Fokus, funktioniert alles, hat aber ein anderes Fenster den Fokus, gehts nicht mehr.
    Ich denke mir mal, es liegt daran, dass das Routing von OnCmdMsg nur an aktive Fenster geht (Ist zu mindestens bei mir so) und somit nicht darauf reagiert wird.

    Also das Routing auf das Fenster erlauben, auch wenn es nicht den Fokus hat.

    Ist das so korrekt oder ist wo anders noch was falsch?


  • Mod

    Wenn der View keinen Fokus hat, dann bekommt er auch kein PreTranslateMessage!
    Wie soll es denn funktionieren. Das macht doch auch kenerlei Sinn!
    Wenn ein Hotkey in mehreren Views funktionieren soll, dann kann man seine Behandlubg ihn nicht in einm View verankern. Dnan gehört er ins Frame...


Anmelden zum Antworten