首页 > 解决方案 > 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, width, starty,++startx);
                wprintw(my_win, "This is some text");
                wrefresh(my_win);
                break;
            case 'w':
                destroy_win(my_win);
                my_win = create_newwin(height, width, --starty,startx);
                wprintw(my_win, "This is some text");
                wrefresh(my_win);
                break;
            case 's':
                destroy_win(my_win);
                my_win = create_newwin(height, width, ++starty,startx);
                wprintw(my_win, "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;
        }

标签: ncursescurses

解决方案


keypad函数仅适用于作为其参数给出的窗口。当您使用newwin等时,它们会返回一个未设置键盘模式的窗口。

newwin文件指出

无论用于创建新窗口的函数(例如 ,、、、、) newwinsubwin而不是副本(使用 dupwin),所有窗口模式都被初始化为默认值derwinnewpad这些函数在创建窗口后设置窗口模式:

idcok, idlok, immedok, 键盘, leaveok, nodelay, scrollok,
setscrreg、syncok、wbkgdset、wbkgrndset 和 wtimeout


推荐阅读