Ist es möglich, Szintilla zu sagen, dass er bestimmte Tastenanschläge ignorieren und an das übergeordnete Fenster weitergeben soll?

StackOverflow https://stackoverflow.com/questions/1982448

Frage

Ich möchte, dass Szintilla bestimmte Schlüsselkombinationen wie Strg+Enter oder Strg+D ignoriert und das übergeordnete Fenster benachrichtigt, wenn sie eingegeben werden. Ich habe die Dokumentation durchlesen und konnte nicht herausfinden, wie das geht. Ist das möglich?

War es hilfreich?

Lösung

Es gibt wirklich zwei Optionen. Einklammern in WM_KEYDOWN, wie vorgeschlagen, ist eins. Das andere ist die Verwendung einer Gaspedal -Tabelle (siehe http://msdn.microsoft.com/en-us/library/ms645526(vs.85).aspx) Um die Tastendrucks in höhere Ebenenbefehls-IDs zu übersetzen und die Befehls-IDs in Ihrem zu verarbeiten WM_COMMAND Handler.

Die Verwendung der Beschleunigertabelle ist zweifellos der "richtige" Weg, aber WM_KEYDOWN Scheint genauso gut zu funktionieren und erfordert nicht das Ändern des Message -Loop -Codes/der Verfolgung der Magic Framework -Funktion, die überschrieben werden muss/usw.

(Wenn Sie MFC verwenden, ist die Magic Framework-Funktion für Fensterspezifische Beschleunigertabellen CWnd::PreTranslateMessage. Überschreiben, rufen Sie an, rufen Sie an TranslateAccelerator Dort (in der Gaspedal -Tabelle übergeben, die im Konstruktor/ im Konstruktor geladen ist/OnCreate/etc.) und kehren Sie zurück FALSE -- wenn TranslateAccelerator zurückgegeben 0 - oder TRUE - Wenn es etwas anderes zurückgab. Dies ermöglicht die Verwendung von Tastaturverknüpfungen, die für Szintilla -Fenster spezifisch sind.)

Übrigens koexistieren diese beiden Methoden sehr glücklich, sodass einige Tastaturen mit Beschleunigern und anderen mit behandelt werden können WM_KEYDOWN. Mein letztes Szintilla -Programm hat dies getan; Ich kann mich nicht erinnern, warum ich fürchte, aber es hat sicherlich gut funktioniert.

Andere Tipps

Nun, wenn alles andere fehlschlägt, können Sie die Fensterprozedur des Szintilla -Steuerelements subklassen. Es wäre ziemlich einfach, die Nachrichten von WM_Key- und WM_Keyup abzufangen, sie zu filtern und sie dann entweder an das Hauptfenster des Szintilla -Fensters oder an Ihr übergeordnetes Fenster weiterzugeben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top