0

我需要为我的程序创建一个主循环并编写以下函数:

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 。我怎样做?我可以设置特殊属性或调用特殊功能吗?

4

3 回答 3

1

你需要打电话给keypad()例如keypad(stdscr, TRUE)。但除此之外,功能键可能无法在您的终端上使用。检查您的 ncurses.h 文件中的 has_key ()函数,您可以使用它来确定它们是否在您的终端上可用。

于 2011-12-17T18:23:38.900 回答
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
于 2011-12-29T18:44:18.340 回答
0

首先,每个 ncurses 函数只能在initscr()被调用后使用。在您的代码中cbreak()noecho()可能会被忽略。
其次,如果你想使用功能键,你必须通过调用来告诉 ncurses keypad(stdscr, TRUE)。但是,由于并非每台计算机都有功能键,因此您应该始终检查系统是否支持该功能,使用has_key()(与has_colors()检查当前终端是否支持颜色相同)。

于 2011-12-28T12:17:44.840 回答