# C++ Menue erstellen ( Konsole )



## js-mueller (22. November 2003)

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


----------



## chibisuke (22. November 2003)

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...


----------



## js-mueller (22. November 2003)

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?


----------



## Sinac (22. November 2003)

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:

```
...
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


----------



## Kocha (22. November 2003)

Willst Du n Menu ala Yast machen, das mit den Pfeiltasten navigierbar ist?


----------



## js-mueller (22. November 2003)

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.


----------



## Kocha (22. November 2003)

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:


```
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.


----------



## js-mueller (22. November 2003)

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.


----------



## Kocha (22. November 2003)

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.


----------



## js-mueller (22. November 2003)

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


----------



## Kocha (22. November 2003)

Bisher hab ich diese Antwort gekriegt:



> Installier mal das Paket Xdialog. Wenn's unbedingt nur auf der Konsole
> sein soll dann dialog.
> 
> Wenn es unbedingt C++ sein soll dann ncurses.




Das ist aber nicht genau das, was ich wollte. ;-) 
Habe aber meine Fragen mal präzisiert. ;-)


----------



## Kocha (24. November 2003)

Hab n Tutorial gefunden, in dem Du alles finden solltest, was Du wissen wolltest. ;-) 

Aber ist alles in C, nix C++.

Zieh's Dir mal rein:

http://www.pronix.de/index.php?site=C/Linuxprogrammierung/index


----------



## js-mueller (24. November 2003)

k danke. Ich werd mir das mal angucken und vll kann man es ja umschreiben.


----------

