- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我很难尝试让 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/
我使用 ncurses 创建了一个单窗口菜单方案并让它运行起来。当我添加第二个窗口时,我无法再触发我的 wgetch 调用(或者看起来是这样)。 函数原型(prototype)让我有些困惑: int
这个问题在这里已经有了答案: Undefined reference to `stdscr' while using ncurses (7 个回答) 1年前关闭。 我对 C++ 很陌生,需要一些帮助来
我很难尝试让 wgetch 在移动和调整窗口大小后从窗口读取数据。 输入后,我向上移动窗口并将其高度也增加 1。然后我清除窗口并将数据写回它。问题是当我执行 wgetch(或 mvwgetch)时,它
我是一名优秀的程序员,十分优秀!