меню c++ codeblocks pdcurses
Илья Выдышев

Здравствуйте, не могли бы кто-нибудь помочь с вот такой задачей: Есть программа с вертикальным меню. нужно, чтобы 3 кнопка, при её нажатии, выводилось точно такое же второе меню, а во втором меню при нажатии той же самой 3 кнопки опять 1 меню? Вот код исходной программы:

include <curses.h>

include <panel.h>

include <cstdlib>

include <ctime>

include <windows.h>

include <iostream>

include <cmath>

WINDOW *win[3];

void repaint(int a)
{int k;
for(k=0;k<=2;k++)
{
if(k==a)
{
wbkgdset(win[k],COLOR_PAIR(4));
wclear(win[k]);
wattron(win[k],COLOR_PAIR(4));
box(win[k],'|','-');
wattron(win[k],COLOR_PAIR(4));
wmove(win[k],2,7);
wprintw(win[k],"Knopka %d",k+1);
wrefresh(win[k]);
}
else
{
wbkgdset(win[k],COLOR_PAIR(4));
wclear(win[k]);
wattron(win[k],COLOR_PAIR(4));
box(win[k],'|','-');
wattron(win[k],COLOR_PAIR(4));
wmove(win[k],2,7);
wprintw(win[k],"Knopka %d",k+1);
wrefresh(win[k]);
}
}
}

void knopka0()
{
int K;
double knp=0;
WINDOW *testwin=newwin(20,70,4,6);
wbkgdset(testwin,COLOR_PAIR(1));
wclear(testwin);

//
wmove(testwin,5,20);
wprintw(testwin,"askei kod klavish");
wmove(testwin,10,20);
wprintw(testwin,"Nazhmi lubuu klavishu");
wmove(testwin,15,20);
wprintw(testwin,"Kod klavishu");
wmove(testwin,1,20);

wprintw(testwin,"Esc - exit");

wmove(testwin,15,20);
wrefresh(testwin);

//

srand(time(NULL));
keypad(stdscr,TRUE);
refresh();
do
{K=getch();
/clear();/
move(19,40);
printw("%d",K);
refresh();}
while (K!=27);
wclear(testwin);
wrefresh(*win);
endwin();

}

void knopka1()
{
int K;
int sec;
double knp=0;
WINDOW *testwin=newwin(20,70,4,6);
wbkgdset(testwin,COLOR_PAIR(1));
wclear(testwin);
box(testwin,'|','-');
//

wmove(testwin,5,20);
wprintw(testwin,"magic_value");
wrefresh(testwin);
wmove(testwin,15,20);
wprintw(testwin,"Esc - exit");
wrefresh(testwin);
//
// srand(time(NULL));
int sec2;
//int resh;
sec=rand()%100+1;
//sec*=1000;
//sec2=rand()%10+1;
//resh=sec2*sec;
//Sleep(sec);
wmove(testwin,15,20);
attron(A_BOLD);
printw("%d",sec);
attroff(A_BOLD);
attron(A_BLINK);
//wprintw(testwin,"Go");
//wprintw(testwin,sec);
wrefresh(testwin);
//printw("%d",sec);
move(12,32);
wrefresh(*win);
wrefresh(testwin);
wclear(testwin);
wclear(*win);

do
{
K=getch();
//clear();
if(K==32)
{

endwin();
}
//printw("%d",K);
//refresh();}
}
while (K!=27);
{
move(12,32);
/* int delwin(WINDOW testwin);
int delwin(WINDOW win);*/
}

}

void knopka2()
{
int K;
double knp=0;
WINDOW *testwin=newwin(20,70,4,6);
wbkgdset(testwin,COLOR_PAIR(1));
wclear(testwin);
box(testwin,'|','-');
//
wmove(testwin,5,20);
wprintw(testwin,"Hello world");
wmove(testwin,10,20);

wprintw(testwin,"Esc - exit");
wrefresh(testwin);
//
srand(time(NULL));
keypad(stdscr,TRUE);
refresh();
int C;

{
C=getch();
}
while (C!=27&&C!=32);
{
wclear(testwin);
wrefresh(*win);
endwin();
}
}
//
int main()
{
initscr();
//
start_color();
init_pair(1,COLOR_WHITE,COLOR_BLUE);
init_pair(2,COLOR_BLACK,COLOR_WHITE);
init_pair(3,COLOR_BLACK,COLOR_CYAN);
init_pair(4,COLOR_BLACK,COLOR_WHITE);
//
//
bkgdset(COLOR_PAIR(1));
noecho();
clear();
cbreak();
//
int maxx=getmaxx(stdscr);
int maxy=getmaxy(stdscr);
//
WINDOW *topwin=newwin(3,maxx,0,0);
wbkgdset(topwin,COLOR_PAIR(2));
wclear(topwin);
wattron(topwin,COLOR_PAIR(2));
box(topwin,'|','-');
wmove(topwin,1,30);
wprintw(topwin," MENU");
wmove(topwin,17,32);
//
int k;
for(k=0;k<=2;k++)
{
win[k]=newwin(5,25,k*5+5,25);
wbkgdset(win[k],COLOR_PAIR(4));
wclear(win[k]);
wattron(win[k],COLOR_PAIR(4));
box(win[k],'|','-');
wmove(win[k],2,7);
wprintw(win[k],"Knopka %d",k+1);
}
//
refresh();
wrefresh(topwin);
for(k=0;k<=2;k++){wrefresh(win[k]);}
//
mousemask(BUTTON1_CLICKED,NULL);
keypad(stdscr,TRUE);
//
int C;
int active=3;
int x=32;
int y=7;
move(y,x);
//
do{
C=getch();
if ((C==259)&&(y>5)) y-=5;
if ((C==258)&&(y<15)) y+=5;
if ((C==260)&&(x>0)) x--;

if ((C==261)&&(x<100)) x++;
move(y,x);
if(C==32)
{
/*MEVENT M;
nc_getmouse(&M);
if((M.x>=25)&&(M.x<=50)&&(M.y>=5)&&(M.y<=20)){active=M.y/5;active--;}
else active=3;/
if(/*active==0
/y==17){knopka0();}
if(/active==1/y==12){knopka1();}
if(/active==2/y==7){knopka2();}
if((active>=0)&&(active<=2))
{
wclear(topwin);
clear();
wclear(topwin);
refresh();
box(topwin,'|','-');
wmove(topwin,1,30);
wprintw(topwin," MENU");
wrefresh(topwin);
repaint(active);
move(17,32);
refresh();
clear();
//wrefresh(*win);

}else repaint(active);
}
}
while(C!=27);
endwin();
return 0;
}

Илья Выдышев 9 месяцев назадСпасибо 0
1 чел.