在移动并调整其大小后,我很难获取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/

10-11 19:50
查看更多