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 被覆盖了。
我正在尝试进入 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 被覆盖了。