Tastatur-Nachrichten
Genauso wenig wie es unter WINDOWS eine Funktion namens printf(...)
gibt um Texte auszugeben, genauso wenig gibt es eine sscanf(...) oder
getch(...) Funktion zum Einlesen von der Tastatur. Statt dessen sendet
WINDOWS bis zu fünf(!) Nachrichten, in der Regel immer an das aktive Fenster, wenn
eine Taste gedrückt wird. Sehen wir uns diese Nachrichten nun an.
Wird eine 'normale' Taste gedrückt bzw. wieder losgelassen, so sendet WINDOWS
eine WM_KEYDOWN bzw. WM_KEYUP Nachricht. Für die Bearbeitung dieser Nachrichten
stellt die MFC die CWnd-Methoden OnKeyDown(...) bzw. OnKeyUp(...)
bereit. Der erste Parameter dieser Methoden enthält den virtuellen Tastencode der
gedrückten Taste. Der virtuelle Tastencode gibt nur die Taste an, die gedrückt wurde
und entspricht nicht unbedingt dem ASCII-Code der Taste. So besitzen z.B. die Zeichen
'A' und 'a' den gleichen virtuellen Tastencode. Die nachfolgende Aufstellung ist
ein Auszug aus der Datei WINUSER.H und enthält einige der wichtigsten virtuellen
Tastencodes:
|
Virtuelle Taste
|
Tastatur-Taste
|
| VK_BACK |
Backspace Taste |
| VK_RETURN |
Return (Enter)
Taste |
| VK_ESCAPE |
Escape Taste |
VK_LEFT, VK_RIGHT,
VK_UP, VK_DOWN |
Cursor Tasten |
| VK_SNAPSHOT |
Druck Taste |
| '0' ... '9' |
Tasten 0 ...
9 |
| 'A' ... 'Z' |
Tasten A ...
Z |
| VK_F1 ... VK_F12 |
Funktionstasten
F1 ... F12 |
Der zweite Parameter gibt die Anzahl der von der Tastatur gesendeten Zeichen
an. Dieser Parameter besitzt in der Regel den Wert 1. Nur bei gedrückt gehaltener
Taste enthält dieser Parameter einen Wert größer 1. Der letzte Parameter enthält
u.a. noch den Scan-Code der gedrückten Taste.
Wird eine Systemtaste (beliebige Taste in Kombination mit der ALT-Taste) gedrückt
oder losgelassen, so wird anstelle einer WM_KEYDOWN bzw. WM_KEYUP Nachricht die
Nachricht WM_SYSKEYDOWN bzw. WM_SYSKEYUP gesendet. Die Nachrichtenbearbeiter innerhalb
der MFC heißen dem entsprechend OnSysKeyDown(...) bzw. OnSysKeyUp(...).
Die Bedeutungen der Parameter der Methoden entsprechen denen der Methoden OnKeyXxxx(...).
Waren die bisherigen Nachrichten nur Tastennachrichten, so wenden wir uns jetzt
den Zeichen selbst zu. In den Down- bzw. Up-Nachrichten wird nur der virtuelle Tastencode
übertragen, nicht aber der ASCII-Code wie z.B. 0x61 für das kleine 'a'. Wissen Sie
noch wie aus dem virtuellen Tastencode der Zeichencode wird? Diese Umkodierung erfolgt
durch den Aufruf der API-Funktion TranslateMessage(...) (siehe dazu im
Kapitel 2, Lektion Die Nachrichtenschleife). TranslateMessage(...)
übersetzt eine entsprechende Down-Nachricht in eine WM_CHAR Nachricht wenn die gedrückte
Taste eine ASCII-Taste ist. Für die Bearbeitung dieser Nachricht stellt die Klasse
CWnd den Nachrichtenbearbeiter OnChar(...) zur Verfügung. Die
letzten beiden Parameter der Methode entsprechen in ihrer Bedeutung den gleichnamigen
Parametern in den bisherigen Tastaturnachrichten. Lediglich der erste Parameter
hat eine andere Bedeutung. Er enthält jetzt den ASCII-Code der gedrückten Taste.
 |
Sehen wir
uns einmal an welche Nachrichten auftreten wenn Sie den Großbuchstaben 'A' eingeben:
Nachricht
|
Auslöser
|
| WM_KEYDOWN |
SHIFT-Taste wird gedrückt. |
| WM_KEYDOWN |
virtuelle Taste 'a'
wird gedrückt. |
| WM_CHAR |
Nachricht mit dem
ASCII-Code für 'A'. |
| WM_KEYUP |
virtuelle Taste 'a'
wird losgelassen. |
| WM_KEYUP |
SHIFT-Taste wird losgelassen. |
|
Wurde eine Systemtaste gedrückt, so wird über die API-Funktion TranslateMessage(...)
eine WM_SYSCHAR Nachricht ausgelöst. Der CWnd Nachrichtenbearbeiter hierfür
heißt folglich auch OnSysChar(...).
 |
Sehen wir uns einmal an welche Nachrichten auftreten wenn Sie
ALT-A eingeben:
Nachricht
|
Auslöser
|
| WM_SYSKEYDOWN |
ALT-Taste wird gedrückt. |
| WM_SYSKEYDOWN |
virtuelle Taste 'a'
wird gedrückt. |
| WM_SYSCHAR |
Nachricht mit dem
ASCII-Code für 'A'. |
| WM_SYSKEYUP |
virtuelle Taste 'a'
wird losgelassen. |
| WM_KEYUP |
ALT-Taste wird losgelassen. |
Beachten Sie bitte, dass das Loslassen der ALT-Taste eine normale WM_KEYUP
Nachricht erzeugt.
|
Damit sind wir fast am Ende dieser kurzen Lektion angelangt. Einen Sonderfall
haben wir noch nicht behandelt, die so genannten 'toten Tasten'. 'Tote Tasten' sind
Tasten die für sich alleine genommen keine Ausgabe erzeugen. Zu den 'toten Tasten'
gehören auf der deutschen Tastatur die Akzente (links neben der Backspace-Taste
und links neben der 1-Taste). Diese Tasten erzeugen eigene Nachrichten, für die
die MFC auch entsprechende Bearbeiter OnDeadChar(...) und OnSysDeadChar(...)
zur Verfügung stellt.
 |
Auch zu dieser Lektion gibt es selbstverständlich ein kleines
Beispielprogramm das Sie unter 06Eingaben\KeybMsg
finden. Auf eine Beschreibung des Programms soll hier verzichtet werden da es
von seiner Struktur recht einfach aufgebaut ist. Das Programm stellt alle
Tasteneingaben in dekodierter Form innerhalb eines Fensters dar. Die Betonung
liegt hier aber eindeutig auf ALLE! Sie können das Fenster z.B. nicht mehr mit
ALT-F4 schließen und auch der Wechsel zu einer anderen Applikation mit ALT-TAB
funktioniert nicht. Also aufpassen wenn Sie Eingaben abfangen! |
In der nächsten Lektion erfahren Sie zum Schluss dieses Kapitels noch etwas über
den Eingabe-Cursor.
|