刷新需要而不是wrefresh?

时间:2011-07-23 23:53:28

标签: ncurses

为什么这段代码在这里:

#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 个答案:

答案 0 :(得分:3)

问题是人们不能将getch()与其他窗口混合在一起。 getch()执行refresh()。一个人应该使用wgetch(WI)代替。

仍然让我感到困惑的是为什么在代码的开头使用refresh()使文本出现。但我认为要理解这种行为,我需要发布整个代码,看看这些功能如何混合所有屏幕。

现在wgetch()问题已经消失。