функция box не дает вывода для newwin - PullRequest
0 голосов
/ 11 октября 2019

Я использую ncurses на c4droid на Android. Здесь box() отлично работает с указателем окна initscr(), но без поля newwin().

Код:

#include <ncurses.h>

int main() {
    WINDOW * Win = initscr();
    noecho();
    crmode();
    WINDOW * win = newwin(10, 10, 1, 1);
    box(Win,0,0); // This works
    box(win,0,0); // no output
    wrefresh(win);
    refresh();
    getch();
    endwin();
}

Ответы [ 2 ]

0 голосов
/ 11 октября 2019

Вызов refresh перезаписывает wrefresh, поскольку вызов initscr указывает библиотеке curses инициализировать экран перед тем, как что-либо еще, и поскольку эта инициализация применяется к stdscr.

* 1006. * Изменение порядка поможет (но также поможет чтение из последнего окна для обновления):
#include <ncurses.h>

int main() {
    WINDOW * Win = initscr();
    noecho();
    crmode();

    WINDOW * win = newwin(10, 10, 1, 1);
    box(Win,0,0);
    refresh();

    box(win,0,0);
    wrefresh(win);

    wgetch(win);
    endwin();
}
0 голосов
/ 11 октября 2019

refresh() обновляет главный экран , который очистит ваше окно. Но если вы удалите его, он все равно не работает. Это потому, что getch() воздействует на главное окно и неявно обновляет его. Таким образом, исправление заключается в

  1. месте refresh(); до wrefresh(win);
  2. изменения getch() на wgetch(win)
...