我正在尝试编写一个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有关,一个不响应键的程序工作正常。调用刷新也会导致问题。
答案 0 :(得分:1)
subwin手册页说:
使用此例程时,需要调用touchwin或 在subwindow上调用wrefresh之前的原始触摸线。
创建子窗口实际上并不会更改父窗口,因此在第一次刷新后父窗口没有更改时,触摸窗口会将其标记为已更改。
所以改变:
wrefresh(sub);
到
touchwin(sub);
wrefresh(sub);