我试图进入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
这是ncurses的Ubuntu版本的错误吗?还是我忘了图书馆?
答案 0 :(得分:4)
您需要拨打wgetch(vin)
而不是getch()
。 (并且,由于wgetch
会自动调用wrefresh
,因此您可以移除前面的wrefresh(vin)
。)
ncurses不允许您使用重叠窗口。或者,或许更好地说,您可以使用重叠窗口,但您有责任以正确的顺序显示它们。
所有非w
函数(包括getch
)都在主窗口(由initscr
返回)上工作,该窗口覆盖整个屏幕。如果刷新主窗口,则会覆盖任何其他窗口。因此,您需要确保在刷新主窗口后刷新其他窗口。如果使用多个窗口,通常最好避免使用主窗口;只需在开始时刷新一次,然后不管它。
因为(w)getch将自动刷新它应用的任何窗口,对getch()
的调用隐式调用refresh()
;因为在调用wrefresh(vin)
之后,你的子窗口被覆盖了。