微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

wgetch 未检测到 KEY_UP 等

如何解决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 文档指出

无论用于创建新窗口的函数是什么(例如, newwinsubwinderwinnewpad >),而不是重复(使用 dupwin), 所有的窗口模式都被初始化为默认值。这些 函数在创建窗口后设置窗口模式:

idcok,idlok,immedok,keypad,leaveok,nodelay,scrollok,setscrreg,syncok,wbkgdset,wbkgrndset,and wtimeout

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。