Hotkey Common Control: Textstring des Hotkeys lesen
-
Ein Hotkey common control zeigt den Hotkey dem Benutzer als Text.
Z.B.:kein
STRING + NACH-RECHTS
ALT + UMSCHALT + STRING + NUMWie kann man diese Strings erhalten um sie an anderen Stellen im Programm(in Listenelementen) anzuzeigen?
Ich habe schon WM_GETTEXT versucht. Das liefert keinen Text zurück.
GetKeyNameText( test,buffer,70);Das ist eigentlich die Funktion, die ich brauche, leider muss test als Scancode vorliegen und nicht als Virtual keycode.
Ansonsten wird immer 0 zurückgegeben.
Deshalb brauche ich die FunktionUINT test=MapVirtualKey( wHotkey,0);Eigentlich muss der 2. Parameter MAPVK_VK_TO_VSC sein. In den windows.h und winuser.h Headern ist diese Konstante aber scheinbar nicht definiert.
Microsoft sagt, dass für WinCE eine 0 statt der konstante übergeben werden muss. Ich hoffe einfach, dass das für Windows auch stimmt.
Jedoch liefert mir diese Funktoin auch nur 0 statt eines übersetzten Scancodes zurück.Kennt jemand eine Lösung? Stichwörter würden mir schon reichen. Natürlich ist etwas Code nie schlecht, wenn man keinen Ausweg sieht.
Oder bin ich gezwungen mir eine eigene Übersetzungstabelle zu schreiben um jede Taste wie Nach-Links übersetzten zu können?
-
Es gibt die Funktion GetKeyNameText. Mit der kannst Du die Bezeichnungen laden. Dir muss aberklar sein, dass Du die entsprechenden Bezeichnungen selbst zusammenbauen musst wenn es Tastenkombinationen sind mit Strg+Umschalt+ALT etc. Es sind ja auch unterschiedliche Scancodes.
-
Martin Richter schrieb:
Es gibt die Funktion GetKeyNameText. Mit der kannst Du die Bezeichnungen laden. Dir muss aberklar sein, dass Du die entsprechenden Bezeichnungen selbst zusammenbauen musst wenn es Tastenkombinationen sind mit Strg+Umschalt+ALT etc. Es sind ja auch unterschiedliche Scancodes.
Ich habe doch gesagt, dass ich schon versucht habe diese Funktion zu benutzen. Mittlerweilse funktioniert es auch. Ich habe den Tipp bekommen, dass die MFC von Microsoft auch auf der WinApi basieren. Also habe ich mir die Codes durchgelesen, außerdem habe ich mir die Bitbreiten jeder Funktion angesehen und habe genau hingeschaut, wenn von einem HIBYTE eines 32 Bit-Wertes gesprochen wurde.
Ich habe aber eine weitere Frage:
Wenn man normale Editfelder hat, kann man die Killfocus Message so behandeln:case 33: { switch (HIWORD(wparam)) { case EN_KILLFOCUS: { MessageBox(0,"edit","Killfocus",0); break; } } break; }Ähnlich funktioniert es mit Comboboxen usw. Wie aber geht das, wenn ich ein HotkeyControl habe.
Dort gibt es eine WM_Killfocus, die man selber senden kann.
Kann ich eine eigene WindowProc Funktion für das HotkeyControl schreiben, welches diese Message behandelt?Edit: Besser wäre natürlich ein ON_KEY_UP, damit man noch schneller auf den neuen Hotkey reagieren kann.
-
WM_KILLFOCUS kan und darf man nicht selber senden. Es ist eine Benachrichtigung an ein Control, das Windows ihm den Focus entzogen hat!
Alle neuen Common Controls arbeiten über WM_NOTIFY dort gibt es auch NM_KILLFOCUS!