gpt4 book ai didi

c++ - ncurses:移动/调整窗口大小后 wgetch 无法正确读取

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:28:58 25 4
gpt4 key购买 nike

我很难尝试让 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com