требуется обновление вместо wrefresh? - PullRequest
3 голосов
/ 24 июля 2011

Почему этот кусок кода здесь:

#include <ncurses.h>
#define WIN 5
#define WI win[0]
#define WC win[1]

int ymax, xmax;
WINDOW *win[WIN];

int main(void)
{

    int i;
    initscr();
    cbreak();
    start_color();
    curs_set(0);
    noecho();
    init_pair(1,COLOR_GREEN,COLOR_BLACK);

    getmaxyx(stdscr, ymax, xmax);
    for(i=0; i<WIN; i++)
        win[i]= newwin(ymax, xmax, 0, 0);
    keypad(stdscr, TRUE);   /* We get F1, F2 etc..      */
    keypad(win[0], TRUE);   /* We get F1, F2 etc..      */

    refresh();

    wprintw(WI, "Screen 1\n");
    wprintw(WC, "Screen 2\n");

    wattrset(WI, COLOR_PAIR(1));
    wrefresh(WI);

    getch();
    endwin();
    printf("\nThanks for playing\n");
    return 0;
}

не работает, если я удаляю

refresh();

линия

Также, пожалуйста, я новичок в этом ncurses, так что если вы видите какое-либо другое заблуждение, будьте добры указать, особенно процедуру выхода, не оставляя незавершенных.

1 Ответ

3 голосов
/ 24 июля 2011

Проблема в том, что нельзя смешивать getch() с другими окнами. getch() сделать refresh(). Вместо этого следует использовать wgetch(WI).

Все еще меня удивляет, почему использование refresh() в начале кода заставило текст появиться. Но я думаю, что для понимания этого поведения мне нужно опубликовать весь код, чтобы увидеть, как функции смешивают все экраны.

Теперь с wgetch() проблема исчезла.

...