在移动并调整其大小后,我很难获取wgetch
从窗口读取数据。
输入后,我将窗口向上移动并将其高度也增加了1。然后,我清除窗口并将数据写回到它。问题是当我执行wgetch
(或mvwgetch
)时,它将输入光标定位在上移窗口之前的先前位置。
这是我的代码:
#include <ncurses.h>
int main() {
WINDOW *win=initscr();
int y,x,i=1;
getmaxyx(win, y, x);
//creates a sub windows 1 col high
WINDOW *child=derwin(win, i, x, y-i, 0);
//doc says to touch before refresh
touchwin(win);
//print to child
waddstr(child, "hello");
wrefresh(child);
wrefresh(win);
noecho();
while(wgetch(child)!='q') {
++i;
mvderwin(child, y-i, 0);
wresize(child, i, x);
touchwin(win);
wclear(child);
waddstr(child,"hello");
wrefresh(child);
wrefresh(win);
}
delwin(child);
delwin(win);
endwin();
}
在这里,单词“hello”确实按预期的方式向上移动,但是输入光标位于错误的位置。使用
mvwgetch
仍然会导致相同的问题。 cbreak()
,noecho()
和scrollok(child)
似乎也没有帮助。谢谢
编辑:更新的版本更好地显示问题http://liveworkspace.org/code/31DruQ $ 0
最佳答案
您必须赶上SIGWINCH,当您调整终端大小时会发送该信号。执行endwin(),refresh(),然后重新绘制窗口。光标位置是相对于窗口的,而不是实际的终端大小。窗口不会自动调整大小。
编辑:对,您实际上是在调整窗口大小,而不是终端大小。在这种情况下,首先,对子LAST进行刷新,屏幕上显示的光标是最后发生的刷新之一。
在您的子窗口周围放一个盒子,并检查它们实际上是否在正确调整尺寸/移动。
关于c++ - ncurses:移动/调整窗口大小后,wgetch无法正确读取,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14893106/