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 を出力します。どうやって?特別な attr を設定したり、特別な関数を呼び出したりできますか?

4

3 に答える 3

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

initscr()まず、すべての ncurses 関数は、呼び出された後にのみ使用する必要があります。あなたのコードcbreak()noecho()は、おそらく無視されます。第 2 に、ファンクション キー
を使用する場合は、 を呼び出して ncurses に通知する必要があります。ただし、すべてのコンピュータにファンクション キーがあるわけではないため、システムがその機能をサポートしているかどうかを常に確認する必要があります(現在の端末がカラーをサポートしているかどうかの確認と同じ)。keypad(stdscr, TRUE)has_key()has_colors()

于 2011-12-28T12:17:44.840 に答える