[C++]Pfeiltasten mit "kbhit" und "getch"

DeChecka

Erfahrenes Mitglied
Hi!
Habe folgendes Problem:

Ich will für ein einfaches Menü in der Konsole abfragen, ob Pfeiltasten gedrückt wurden...

Das realisiere ich so:
Code:
cout << "   Hauptmenue\n   ----------\n";
cout << "-> test0\n";
cout << "   test1\n";
cout << "   test2\n";
cout << "   test3\n";
if(kbhit() && (getch() == 80))
 {
  SetzeCursor(x, y);
  getch();
  cout << "  ";
  SetzeCursor(x, ++y);
  cout <<"->";
 }

Dazu ist zu sagen, dass "SetzeCursor" eine Funktion ist, die den Cursor eben an die gewünschte Selle setzt.
"x" und "y" sind beides ints, die aktuell die Werte der Stelle haben, an der am Anfang der Pfeil "->" ist.
Nun soll durch das Drücken der Pfeiltaste nach unten der Pfeil an der Stelle x/y mit zwei Leerzeichen überschrieben werden und dann an der Stelle x/y+1 ein neuer Pfeil "->" erscheinen.

Leider klappt es nicht, es liegt eindeutig an der Verwendung von "getch()"/"kbhit()".
Das mit "SetzeCursor" funktioniert nämlich auch so...

Kann jemand helfen, wie ich das trotzdem mit den Befehlen "getch()" und "kbhit()" machen kann?

MfG DeChecka
 
Hmm, hab mal weiter rumprobiert und merke, dass der Pfeil nach unten irgendwie gar nicht "80" ist...

Kann es sein, dass die gesamten Richtungstasten als Ganzes den Wert "224" haben?

Bei mir scheint das nämlich so zu sein...
Das ist natürlich von daher blöd, dass ich die Tasten nicht einzeln abrufen kann mit meinen Kenntnissen...

MfG
DeChecka
 
Vielleicht hilf das ja:
The _getch and _getwch functions read a single character from the console without echoing. _getche and _getwche read a single character from the console and echo the character read. None of these functions can be used to read CTRL+C. When reading a function key or an arrow key, each function must be called twice; the first call returns 0 or 0xE0 ( = 224), and the second call returns the actual key code.

Code:
int x = getch();
x = getch();
 
Hallo,

"kbhit()" würde ich schon verwenden, da sonst das Programm an der Stelle stehenbleibt. Frage also zuerst ab ob eine Taste gedrückt wurde und schaue dann nach welche. Siehe Beispiel. Die Abfrage der Taste wurde als Funktion realisiert.

Prototyp:
int Taste();

Funktion:
int Taste()
{
int x;
x=getch();
if(x=224) x=getch(); //Bei Sondertasten nochmal nachschauen und richtigen Wert holen
return x;
}

Aufruf:
if(_kbhit()) keyhit=Taste();

Gruß
Worst
 
Zurück