000
10.01.2003, 16:28 Uhr
void*
Generic Pointer (Operator)
|
Erstellt von Uwe In diesem Kapitel der Einführung - Programmierung mit dem API wollen wir uns mit der einfachen Auswertung von Tastaturereignissen befassen. Einen Text von der Tastatur auf dem Arbeitsbereich unserer Anwendung ausgeben folgt zu einem späteren Zeitpunkt. Der User kommuniziert mit dem Computer in der Regel hauptsächlich mit zwei Eingabehilfen. Der Tastatur und der Maus. Wie erfährt nun unsere Anwendung das eine Taste gedrückt wurde? Durch eine Nachricht. Für die Tastatur gibt es gleich mehrere davon. WM_KEYDOWN, WM_KEYUP, WM_SYSKEYDOWN, WM_SYSKEYUP und für darstellbare Zeichen WM_CHAR. Die beiden "SYS" Nachrichten verwendet Windows um festzustellen ob z.B. die Alt - Taste betätigt wurde. Da dies meist Systembefehle sind kümmert sich unser Betriebssystem selbst um dessen Auswertung. Auch für uns sind diese Nachrichten erst einmal ohne Bedeutung. Nachrichten über Tastendrücke werden von Windows über die MSG-Struktur an das betreffende Fenster weitergegeben. Dabei enthält der Parameter wParam die wesentlichste Information - den virtuellen Code der gedrückten Taste. Der Tastaturtreiber erzeugt Scancodes, welche die Lage der Taste auf unserem Keyboard enthalten, der ANSI-Code steht also nur für das Zeichen. Der virtuelle Tastaturcode dient als sprach- und layoutunabhängiger Bezeichner für Tasten, die keine darstellbaren Zeichen enthalten wie z.B die Enter - Taste.
Es folgt eine Liste der virtuellen Keycodes:
C++: |
VK_RETURN Enter (Schreibmachinentastatur und Ziffernblock) VK_SHIFT Umschalttaste (links und rechts) VK_MENU ALT-Taste (links und rechts) VK_CONTROL Strg (links und rechts) VK_BACK Rücktaste VK_TAB Tabulator VK_PAUSE Pause VK_CAPITAL Feststelltaste VK_ESCAPE Esc VK_SPACE Leertaset VK_INSERT Einfg VK_DELETE Entf VK_HOME Pos 1 VK_END Ende VK_PRIOR Bild auf VK_NEXT Bild ab VK_LEFT Linkspfeil VK_RIGHT Rechtspfeil VK_UP Pfeil aufwärts VK_DOWN Pfeil abwärts VK_SNAPSHOT Druck VK_NUMPAD0 0 bis VK_NUMPAD9 0 - 9 (Ziffernblock, Num_Lock an) VK_MULTIPLY * (Ziffernblock) VK_DIVIDE / (Ziffernblock) VK_ADD + (Ziffernblock) VK_SUBTRACT - (Ziffernblock) VK_DECIMAL , (Ziffernblock) VK_F1 bis VK_F10 F1 bis F10 VK_F11 bis VK_F24 F11 bis F24 VK_NUMLOCK Num_Lock VK_SCROLL Rollen
|
Da wir jetzt bereits Grundlegendes wissen erspare ich mir ab jetzt jedes mal den gesamten Quellcode immer wieder darzustellen. Um die gedrückte Taste zu ermitteln müssen wir in unserer Callback - Funktion nun unsere Nachricht abfragen:
C++: |
case WM_KEYUP: switch(wParam) { case VK_RETURN: MessageBox(NULL, "Sie haben die ENTER-Taste gedrückt\nAbbrechen durch Mausklick auf 'OK'", "Scancode Abfrage", 0); return 0; case VK_SHIFT: MessageBox(NULL, "Sie haben dei Umschalttaste gedrückt", "Scancode Abfrage", 0); return 0; case VK_MULTIPLY: MessageBox(NULL, "Sie haben die '*' Taste auf dem Nummernblock gedrückt", "Scancode Abfrage", 0); return 0; } return 0;
|
Gut. Für die VK Tasten klappt die Sache. Nun noch die Sache für darstellbare Tasten:
C++: |
case WM_CHAR: switch(wParam) { case 'z': MessageBox(NULL, "Die Taste 'z' wurde gedrückt", "WM_CHAR", 0); return 0; case 'Z': MessageBox(NULL, "Die Taste 'Z' wurde gedrückt", "WM_CHAR", 0); return 0; default: return 0; }
|
Nun sind wir bereit um auf Nachrichten (wenn auch noch nicht perfekt) vom User zu reagieren. -- Gruß void* |