Ncurses在Ubuntu Mate上没有显示任何内容

时间:2015-09-13 21:39:05

标签: c ubuntu ncurses

我试图进入ncurses库,但似乎无论我编码什么,我都会在ncurses中得到它: screenshot

使用此代码:

#include <stdio.h>
#include <ncurses.h>

void main()
{
    WINDOW *vin;
    initscr();
    start_color();
    init_pair(1,COLOR_YELLOW,COLOR_BLUE);
    init_pair(2,COLOR_BLUE,COLOR_YELLOW);
    init_pair(3,COLOR_BLUE,COLOR_WHITE); 
    vin=newwin(12,40,13,0);
    wmove(vin,0,5);
    wprintw(vin,"Hello, World.");
    wbkgd(vin,COLOR_PAIR(1));
    wrefresh(vin);
    getch();
    delwin(vin);
    endwin();
}

但是,无论我在编译时使用什么代码,这似乎都是一个问题:

gcc main.c -lncurses

这是ncurses的Ubuntu版本的错误吗?还是我忘了图书馆?

1 个答案:

答案 0 :(得分:4)

您需要拨打wgetch(vin)而不是getch()。 (并且,由于wgetch会自动调用wrefresh,因此您可以移除前面的wrefresh(vin)。)

ncurses不允许您使用重叠窗口。或者,或许更好地说,您可以使用重叠窗口,但您有责任以正确的顺序显示它们。

所有非w函数(包括getch)都在主窗口(由initscr返回)上工作,该窗口覆盖整个屏幕。如果刷新主窗口,则会覆盖任何其他窗口。因此,您需要确保在刷新主窗口后刷新其他窗口。如果使用多个窗口,通常最好避免使用主窗口;只需在开始时刷新一次,然后不管它。

因为(w)getch将自动刷新它应用的任何窗口,对getch()的调用隐式调用refresh();因为在调用wrefresh(vin)之后,你的子窗口被覆盖了。