如何根据用户需求添加新的ncurses子窗口?

时间:2014-03-18 03:36:30

标签: ncurses

我正在尝试编写一个ncurses程序,该程序会添加新窗口以响应用户按键。例如,请考虑以下C ++代码:

#include <iostream>
#include "curses.h"

using namespace std;

int main()
{
    WINDOW * win = initscr();
    start_color();
    noecho();

    WINDOW * sub = subwin(win, 20, 20, 2, 2);
    wborder(sub, 0, 0, 0, 0, 0, 0, 0, 0);

    keypad(win, TRUE);

    while (true)
    {
        int c = wgetch(win);

        if (c == KEY_DOWN)
        {
            WINDOW* box = subwin(sub, 2, 2, (rand() % 20) + 2, (rand() % 20) + 2);
            wborder(box, 0, 0, 0, 0, 0, 0, 0, 0);
        }
        else if (c == KEY_UP)
        {
            wrefresh(sub);
        }
    }

    endwin();

    return 0;
}

用户可以按下向下键,根据需要多次创建新窗口,但wrefresh只会绘制一次。这似乎与调用wgetch有关,一个不响应键的程序工作正常。调用刷新也会导致问题。

1 个答案:

答案 0 :(得分:1)

subwin手册页说:

  

使用此例程时,需要调用touchwin或   在subwindow上调用wrefresh之前的原始触摸线。

创建子窗口实际上并不会更改父窗口,因此在第一次刷新后父窗口没有更改时,触摸窗口会将其标记为已更改。

所以改变:

wrefresh(sub);

touchwin(sub);
wrefresh(sub);