如何解决wgetch 未检测到 KEY_UP 等
我已经为 my_win 启用了键盘,但是当我在运行程序后按下 KEY_UP 时,没有任何反应。奇怪的是,它与 stdscr 一起工作得很好。这似乎只是 my_win 的问题。
/* Selects different elements of the list */
while ((ch = wgetch(my_win)) != 'q')
{
sprintf(item,"%-12s",list[i]);
mvwprintw(my_win,i + 1,2,"%s",item);
switch(ch)
{
case KEY_LEFT:
destroy_win(my_win);
my_win = create_newwin(height,width,starty,--startx);
wprintw(my_win,"This is some text");
wrefresh(my_win);
break;
case 'd':
destroy_win(my_win);
my_win = create_newwin(height,++startx);
wprintw(my_win,"This is some text");
wrefresh(my_win);
break;
case 'w':
destroy_win(my_win);
my_win = create_newwin(height,--starty,startx);
wprintw(my_win,"This is some text");
wrefresh(my_win);
break;
case 's':
destroy_win(my_win);
my_win = create_newwin(height,++starty,"This is some text");
wrefresh(my_win);
break;
case KEY_UP:
i--;
i = (i < 0) ? 4 : i;
break;
case KEY_DOWN:
i++;
i = (i < 0) ? 4 : i;
break;
}
解决方法
keypad
函数仅适用于作为其参数给出的窗口。当您使用 newwin
等时,它们会返回一个未设置键盘模式的窗口。
newwin
文档指出
无论用于创建新窗口的函数是什么(例如,
newwin
、subwin
、derwin
、newpad
>),而不是重复(使用 dupwin),
所有的窗口模式都被初始化为默认值。这些
函数在创建窗口后设置窗口模式:
idcok,idlok,immedok,keypad,leaveok,nodelay,scrollok,setscrreg,syncok,wbkgdset,wbkgrndset,and wtimeout
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。