Problem z menu w ncurses

0

Witam.

Tworzę w ncurses zwykłe menu, gdzie w switchu mam wybór:

    if(znak == 10)
    {
      switch(ktory)
      {
        case 1:
        mvprintw(7,0,"Opcja 1");
        break;
        case 2:
        mvprintw(7,0,"Opcja 2");
    clear();
    printw("Tekscik \n");
    Program::menu1();
        break;
    case 3:
        mvprintw(7,0,"Opcja 3");
        break;
        case 4:
        mvprintw(7,0,"Opcja 4");
        break;
      }
    }

Chodzi mi tu o case 2. Stamtąd przechodze do funkcji menu1, która wygląda tak:

void Program::menu1()
{ 
    cout << endl;
    cout << "Jakis tekst " << endl;
}

Mianowicie, jak w menu wybiore case2 to nie wyświetli mi tego tekstu z menu1, jedynie to co było w case, czyli: printw("Tekscik \n");

Dlaczego nie widać zwykłego tekstu ?
Jak wstawiam dodatkowo przed wyświetleniem menu1 metodę: endwin(); to także nic sie nie wyświetla.

Proszę o pomoc.

0

po prostu nie mozesz uzywac cout, korzystajac z biblioteki ncurses.

0

Mam w pliku Program.cpp zainkludowane:
#include <iostream>
#include <ncurses.h>

Z tym też się nie da ?

Można w jakiś sposób tworząc menu w ncurses, przejść w casie do funkcji , która nie używa ncurses ?

0

Mozna. Konczysz korzystac z biblioteki, chyba endwin() i wywolujesz ta funkcje, a potem znowu inicjujesz biblioteke i tyle.

0

No ale tak robię przecież. Opisałem wyżej.

0

Nie doczytalem, przepraszam. Zaraz sprawdze jak by dalo rade i napisze.

0

Dokładnie chodzi mi o to, żeby w case2 wyszedł totalnie z tego menu do innej funkcji, w tym przypadku menu1.

Powyższe menu działa za pomocą strzałek. Wchodząc do któregoś "case", wyświetlam tekst i chciałbym, żeby to było wszystko. A w dalszym ciągu wciskając strzałkę wchodzę do powyższego menu.

Moge wrzucić reszte kodu.

Z góry dziękuje!

0

Niestety wyglada na to, ze latwo z tym nie bedzie, poniewaz ncurses definiuje wlasne operacje I/O, ktore nie przewiduja strumieni. Zreszta ncurses nie jest biblioteka zorientowana obiektowo, wiec moze brakowac Ci kilku udogodnien z C++. Jedyny sposob to "poprawic" troche kod tej biblioteki.

0
int Menu::tworz_menu() // menu wyboru glownego menu
{

    //start
  initscr();    
  printw("Wcisnij przycisk, aby rozpoczac prace programu...");
  noecho();
  //rozpoczynamy wyswietlanie menu!
  const char txt1[] = "Tekst";
  const char txt2[] = "Tekst2";
  const char txt3[] = "Tekst3";
  const char txt4[] = "Tekst4";
  const char txt5[] = "Wyjscie \n\n\n";
  int ktory = 1;
  int znak;
  const short int min_wybor = 1;
  const short int max_wybor = 5;
  do
  {
    //pobieranie znaku
    znak = getch();
    clear();
    if (znak == 'a' && ktory != min_wybor)
    {
      ktory--;
    }
    else if(znak == 'z' && ktory != max_wybor)
    {
      ktory++;
    }

    //wyswietlanie
    switch(ktory)
    {
      case 1:            
      attron(A_REVERSE);                
      mvprintw(1,1, txt1);
     attroff(A_REVERSE);
    mvprintw(2,1, txt2);
      mvprintw(3,1, txt3);
      mvprintw(4,1, txt4);
      mvprintw(5,1, txt5);
      break;

      case 2:
      mvprintw(1,1, txt1);
      attron(A_REVERSE);
      mvprintw(2,1, txt2);
      attroff(A_REVERSE);
      mvprintw(3,1, txt3); 
      mvprintw(4,1, txt4);
      mvprintw(5,1, txt5);
      break;

      case 3:
      mvprintw(1,1, txt1);
      mvprintw(2,1, txt2);
      attron(A_REVERSE);
      mvprintw(3,1, txt3);
      attroff(A_REVERSE);
      mvprintw(4,1, txt4);
      mvprintw(5,1, txt5);
      break;

      case 4:
      mvprintw(1,1, txt1);
      mvprintw(2,1, txt2);
      mvprintw(3,1, txt3);
      attron(A_REVERSE);
      mvprintw(4,1, txt4);
      attroff(A_REVERSE);
      mvprintw(5,1, txt5);
      break;

      case 5:
      mvprintw(1,1, txt1);
      mvprintw(2,1, txt2);
      mvprintw(3,1, txt3);
      mvprintw(4,1, txt4);
      attron(A_REVERSE);
      mvprintw(5,1, txt5);
      attroff(A_REVERSE);
      break;
    }

    //reakcja          
    if(znak == 10)
    {
      switch(ktory)
      {
        case 1:
        return ktory;
        break;
        case 2:
    return ktory;
        break;
    case 3:
    return ktory;
        break;
        case 4:
        return ktory;
        break;
      }
    }

  }while(ktory != 5 || znak != 10);

  printw("Koniec programu, przycisnij przycisk...");
  getch();
  endwin();
  cout << "Przykladowa sytuacja. " << endl;
return ktory;

}

Mam taki kod funkcji klasy menu. Zwraca ona wartosc wyboru menu.

Następnie mam inną klase Program , a w niej używam zwróconej wcześniej wartości do wyświetlania danej możliwości menu:

int z =0;
    Menu a; 
    z = a.tworz_menu();
    if (z !=5)
    {
        switch(z)
      {
        case 1:
     Program::menu1();
        break;
        case 2:
        Program::menu3();
        break;
        case 3:
     Program::menu2();
        break;
        case 4:
        Program::menu2();
        break;
      }

    }
}

z czego np. menu 2 wygląda tak:

void Program::menu3()
{
    cout << "udaaaaalo sieeee" << endl;
    cout << "udaaaaalo sieeee" << endl;
    cout << "udaaaaalo sieeee" << endl;
    cout << "udaaaaalo sieeee" << endl;
    cout << "udaaaaalo sieeee" << endl;

}

i wyświetla mi się to tak:

user image

Ma ktoś jakis pomysł dlaczego ?

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0