перерисовка на курсах - PullRequest
       15

перерисовка на курсах

0 голосов
/ 20 марта 2010

Я пытаюсь перерисовать содержимое простого цикла. Пока он печатает до stdscr 100 строк, а затем, используя scrl для прокрутки n строк, я получаю n пустых строк.

То, что я хочу, это придерживаться последовательности. Тем не менее, я не уверен, как перерисовать stdscr с n дополнительных строк. Любые идеи оценят!

#include <ncurses.h>
int main(void)
{
    initscr();
    int maxy,maxx,y;
    getmaxyx(stdscr,maxy,maxx);
    scrollok(stdscr,TRUE);
    for(y=0;y<=100;y++)
        mvprintw(y,0,"This is some text written to line %d.",y);
    refresh();
    getch();
    scrl(5);
    refresh();
    getch();
    endwin();
    return(0);
}

1 Ответ

0 голосов
/ 20 марта 2010

Предположительно, после refresh() после scrl() добавьте строки:

for (y = 96; y <= 100; y++)
    mvprintw(y, 0, "This is some text written as line %d.", y+5);
refresh();

Я использую магические числа, конечно. Вы должны использовать что-то вроде:

enum { MAX_SCR_LINE = 100 };
enum { MAX_SCROLL   =   5 };

Тогда цикл:

for (y = MAX_SCR_LINE - MAX_SCROLL + 1; y <= MAX_SCR_LINE; y++)
    mvprintw(y, 0, "This is some text written as line %d.", y + MAX_SCROLL);
refresh();

А если вам нужно повторять процесс снова и снова, тогда вычисление становится:

enum { MAX_ITER = 10 };
for (int j = 0; j < MAX_ITER; j++)
{
    scrl(MAX_SCROLL);
    for (y = MAX_SCR_LINE - MAX_SCROLL + 1; y <= MAX_SCR_LINE; y++)
        mvprintw(y, 0, "This is the text written as line %d.",
                 y + (j + 1) * MAX_SCROLL);
 }

Etcetera ...

(код не проверен - остерегайтесь ошибок.)

...