[英]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
這是ncurses的Ubuntu版本的錯誤嗎? 還是我忘記了圖書館?
您需要調用wgetch(vin)
而不是getch()
。 (並且,由於wgetch
將自動調用wrefresh
,因此您可以刪除前面的wrefresh(vin)
。)
ncurses不允許您使用重疊的窗口。 或者,也許更好地說,您可以使用重疊的窗口,但是您有責任以正確的順序顯示它們。
所有非w
函數(包括getch
)都在主窗口(由initscr
返回)上工作,該主窗口覆蓋了整個屏幕。 如果刷新主窗口,則將覆蓋其他所有窗口。 因此,您需要確保在刷新主窗口后刷新其他窗口。 如果使用多個窗口,通常最好避免使用主窗口。 只需在開始時刷新一次,然后再將其保留即可。
由於(w)getch會自動刷新其適用的任何窗口,因此對getch()
的調用隱式稱為refresh()
; 因為那是在調用wrefresh(vin)
,所以您的子窗口已被覆蓋。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.