Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » FAQ C / C++ (WinAPI, Konsole) » Tastaturereignisse

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
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*
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ FAQ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: