C++ Menue erstellen ( Konsole )

js-mueller

Erfahrenes Mitglied
Hi

ich möchte gern ein menü für eine Anwendung erstellen.
Ich kenne bis jetzt nur die möglichkeit mit cin ne menüid anzufragen. Und dann vor den jeweiligen Punkt eine id zu schreiben.
Aber kann ich soetwas nicht mit einem curser realisieren, dass ich da durchschalten kann? mit pfeiltaste hoch, pfeiltaste runter und mit enter bestätigen?
Ich arbeite mit Linux und g++. ( Es wäre gut wenn es eine Lösung gäbe die ich auch unter windows bzw. Mac kompilieren könnte )
Ich hoffe jemand kann mir da helfen
 
nun die einzige möglichkeit hier is mit ascii zeichen zu arbeiten...

Also die menü einträge hin schreiben, dann auf n event warten, dann musst du das stück das du überschreibst wenn du dein menü darstellst sichern, das menü darstellen und später wenns nicht mehr gebraucht wird, den rest wiederherstellen...

Am besten suchste ob du was bezüglich "Menüs unter DOS" findest...
 
Hmm

ich wüsste jetzt aber trotzdem nicht wie ich das realiseren könnte. Das es nen bissle aufweniger ist kann ich mir denken.
Kann vll jemand mit nen paar code schnipseln um sich werfen?
 
Also mir hat die möglichkeit mit cin und cout eigentlich immer gereicht, wie das andere geht weiß ich jetzt nicht, aber ich regel das immer so:
Code:
...
int main(){
int eingabe;
While(eingabe != 0){    
    cout << "Menü:" << endl;
    cout << "(1) Punkt eins" << endl;
    cout << "(2) Punkt zwei" << endl;
    cout << "Eingabe:";
    cin >> eingabe;
    switch(eingabe){
       case 1: eins();
       break;
       case 2: zwei();
       break;
       default: cout << "falsche eingabe";
    }
}
return 0;
}
...

Hoffe mal der läuft so :)
 
Ja so ungefähr.
Aber es muss nichtmal so ausfürhlich sein.
halt was ganz einfaches.
einfach das ich so durchschlten kann:

[] Option1
Option2
Option3

Option1
Option2
[] Option3

Option1
[] Option2
Option3

Reicht wenn vorne so ein ascii zeichen ist.
 
Das ist eigentlich nicht so schwer.
Machst ne Schlaufe, die in jedem Durchgang die Eingabe prüft und bei Eingabe zb. Escape verlassen wird (genau so wie oben von Sinac geschrieben).
Was Du dann brauchst ist ne Variable, die die Position im Menu enthält, also 0,1 oder 2.
Nachher machst ne Abfrage, was gedrückt wurde, falls Enter schaust Du in der Variable, welche Position diese enthält und spielst dann den Code zu dem Menupunkt ab, falls links oder rechts bzw. rauf oder runter kriegt die Variable + oder - 1.
Die Ausgabe generierst mit nem Switch, der halt je nach Position den Cursor an nen anderen Ort zeichnet.


Also ungefähr so:

Code:
int main(){
int eingabe,position=0;

While(eingabe != 0){    
    switch(position){
       case(0):{
          cout << ">>Option1" << endl;
          cout << "Option2" << endl;
          cout << "Option3" << endl;}break;
       case(1):{
          cout << "Option1" << endl;
          cout << ">>Option2" << endl;
          cout << "Option3" << endl;}break;
       case(2):{
          cout << "Option1" << endl;
          cout << "Option2" << endl;
          cout << ">>Option3" << endl;}break;}
   cin >> eingabe;
   switch(eingabe){
       case Enter:{
          switch(position){
             case(0):eins();break;
             case(1):zwei();break;
             case(2):drei();break;}break;
       case Up:position++;break;
       case Down:position--;break;
       default: break;}
   if(position=3)
      position=0;
   if(position=-1)
      position=2;
}
return 0;
}
...
(Syntax-Errors vorbehalten ;-) )

Falls Du was schöner formatiertes suchst, musst Du warten, hab heute gerade n Mail an ne Mailingliste geschickt, wie man das macht.
 
Also funktionieren tut das leider nicht.
Er denk enter up und down seien Variablen.
Ich meine auch gelesen zu haben in case dürfen nur integers rein.
 
Nein, das funktioniert so logischerweise nicht.
Du musst die ASCII Codes einlesen, nich irgend ne Integer.
Wollte Dir eigentlich bloss zeigen, wie man das ganze ungefähr aufbaut.
 
Achso hab gedacht du hättest da jetzt was fertiges :)
Wenn ne antwort aus der mailingliste kommt posteste die hier k? Wäre echt nett

Ich werde in der Zeit mal nen wenig weiter tüfteln
 
Zurück