簡體   English   中英

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

這是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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM