我需要为我的程序创建一个mainloop并编写以下函数:
void menu(){
int ch;
cbreak();
noecho();
initscr();
refresh();
while (ch != KEY_F(9)){
ch = getch();
cout << ch << endl;
switch (ch){
case KEY_F(1): add();
break;
case KEY_F(2): edit();
break;
case KEY_F(3):
break;
case KEY_F(4):
break;
}
}
endwin();
}
但getch()不起作用并在循环中打印-1。我怎样做? 我可以设置特殊的attr或调用特殊功能吗?
答案 0 :(得分:1)
您需要致电keypad()
,例如keypad(stdscr, TRUE)
。但除此之外,功能键可能无法在终端上运行。检查你的ncurses.h文件中是否有has_key()函数,你可以用它来确定它们是否在你的终端上可用。
答案 1 :(得分:0)
首先,只有在调用initscr()
后才能使用每个ncurses函数。您的代码cbreak()
和noecho()
可能会被忽略
其次,如果你想使用function keys,你必须通过调用keypad(stdscr, TRUE)
告诉ncurses。但是,由于并非每台计算机都有功能键,因此您应始终使用has_key()
检查系统是否支持该功能(对于检查当前终端是否支持颜色的has_colors()
是否相同)。
答案 2 :(得分:0)
是的,我的循环在这里:
initscr();
clear();
noecho();
cbreak(); /* Line buffering disabled. pass on everything */
startx = (80 - WIDTH) / 2;
starty = (24 - HEIGHT) / 2;
menu_win = newwin(HEIGHT, WIDTH, starty, startx);
keypad(menu_win, TRUE);
mvprintw(0, 0, "Name of my program");
refresh();
print_menu(menu_win, highlight);
while (true)
{ c = wgetch(menu_win);
switch(c){
TYPE OF KEYS;
}//END OF SWITCH
}//END OF LOOP