2011-12-17 26 views
0

我需要創建一個主循環我的程序,並寫了下面的功能:殘培的ncurses的()不工作

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(); 

}

但殘培()無法正常工作和打印 - 1循環。我怎樣做? 我可以設置特殊的attr或調用特殊的func嗎?

回答

1

您需要撥打keypad()keypad(stdscr, TRUE)。但除此之外,功能鍵可能無法在您的終端上工作。檢查您的ncurses.h文件中是否有has_key()函數,您可以使用它來確定它們是否可在您的終端上使用。

+0

的調用CBREAK()和NOECHO()也應該是,來電後initscr的()。 – Craig 2011-12-20 03:31:19

+0

我解決了它後,initscr()我應該打電話cbreak,然後鍵盤()然後getch()正常工作。謝謝。 – PersianGulf 2011-12-28 13:21:38

0

首先,每個ncurses函數只有在調用initscr()後才能使用。在您的代碼cbreak()noecho()可能被忽略。
其次,如果你想使用function keys,你必須告訴ncurses,通過調用keypad(stdscr, TRUE)。但是,由於並非每臺計算機都具有功能鍵,因此您應該始終檢查系統是否支持該功能,使用has_key()(與檢查當前終端是否支持顏色的has_colors()相同)。

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