Ncurses 未在 Ubuntu Mate 上显示任何内容

Ncurses not displaying anything on Ubuntu Mate

我正在尝试进入 ncurses 库,但似乎无论我编写什么代码,我都会在 ncurses 中得到这个:

使用此代码:

#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

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

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

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

所有非w函数——包括getch——在覆盖整个屏幕的主window(由initscr返回)上工作.如果您刷新主要 window,您将覆盖任何其他 windows。所以你需要确保其他 windows 在主 window 的任何刷新之后被刷新。如果使用多个windows,一般最好避免使用mainwindow;开头刷新一次就可以了,以后就不用管了。

因为 (w)getch 会自动刷新它适用的任何 window,所以对 getch() 的调用隐式调用了 refresh();因为那是在调用 wrefresh(vin) 之后发生的,所以你的 subwindow 被覆盖了。