概述ios
這是一個終端的圖形界面庫,補充gui的啊,在terminal上作東東,就實用來講,這個比gui還多了,輕便並且功能強悍 相似的庫:termios.h 這個文件能夠徹底的控制終端,終端本質上只是一種流設備,termios.h這個,是針對這個流設備的, 不僅針對界面的,其中,好比於界面毫無關係的波特率等設置.而ncurses是專門的界面庫. 在ncurses.h 中能夠找到跟本文介紹的相關函數.函數
缺點ui
中文支持不是很好.spa
思想指針
面向過程的想法,不斷的向系統發送命令,開啓,關閉模式,等,打到想要的效果.進程
依賴terminal
-lncurses 最好使用 pkg-config –cflags –libs ncursesget
開啓和結束it
開始ncurses模式,須要io
initscr();
返回一個WINDOWS指針,默認會使用stdscr.也能夠本身接收處理,用於有多個win的狀況.
endwin();
結束ncurses對終端的控制,終端仍是那個終端,只是運行initscr後,ncurses得到了對終端的控制,能夠理解爲ncureses釋放了終端.
註解
ncurses控制的是當前終端,使用ncurses的程序退出後,ncurses對終端的影響還會起做用,由於無論那個程序,使用的是 同一個終端,執行endwin,就避免了對下一個程序的影響,一般須要 atexit(func) 掛載一個退出鉤子,執行這個函數.
基本的終端設置
在initscr之後,ncurses得到了對終端的控制,若是不設置,就是默認的哪些設置,跟通常的終端沒有什麼區別嘛,通常都會進行一些設置的,設置函數以下:
cbreak()
設置無buff模式,就是鍵入的字符馬上被讀取的意思,默認就是這樣的.執不執行同樣.
nocbreak()
設置爲buff模式,在這個模式下,只有return或者newline(就是enter鍵啦)纔會讓getch返回,讓ncurese獲得輸入.
noecho()
設置無會顯模式,就是按下可顯示字符時,不在默認輸出了,讓咱們能夠自由的控制,好比輸入密碼的時候.
echo()
設置能夠會顯.
nl()
設置受到回車的時候換一行,並讓getch獲得這個輸入.
nonl()
回車不讓getch獲得.只是換一行.
keypad(stdscr,TRUE)
設置把受到的特殊鍵好比箭頭,轉化爲ncurses定義的以KEY開頭的數字宏,
keypad(stdscr,FALSE)
設置接收到特殊鍵的時候以轉化後的轉義字符表示,這種表示是沒法進行判斷的.
其中stdscr是一個窗口.
scrollok(stdscr, TRUE)
設置是否能夠滾東屏幕,stdscr是默認窗口,也能夠設置自定義的一塊窗口區域能夠滾動.或者不能滾動.
基本的輸入
int c = getch()
等待用戶輸入一個字符,輸入特殊鍵時,設置keypad後,c是轉行後的數字,沒有設置,
就會返回幾個轉移字符. 注意返回的是int型.
int c = wgetch(stdscr)
等待用戶輸入.在一個 窗口 等待,這個窗口是ncurses的虛擬概念.用第一個好了.
基本的輸出
printw(fmt, …)
參數和printf是同樣的,只是把f換成了w,格式化輸出.這個默認是不會馬上顯示的.只是寫到
了buff裏,想一想雙緩衝的概念,顯示一個,這裏寫的是另外一個.
refresh()
刷新界面,交換兩個緩衝區,馬上顯示,讓用戶本身定義什麼時候進行顯示,給用戶更大的自由度.
mvprintw(int y, int x, fmt, …)
這個也是輸出,是必定光標的輸入點後,在接收輸入字符.y 是第幾行,x 是第幾列.使用的 x 和 y 和窗口座標系 是一致的,只是行數的參數第一個是 y 第二個是 x .
座標的移動和肯定
move(y ,x)
移動座標到 y 行, x 列. 相似的還有 wmove(win, y, x) 移動一個win的光標.
int getcurx(stdscr)
獲得一個窗口的內的當前光標所在的列數.多個窗口的話修改stdscr就行了.
int getcury(stdscr)
獲得一個窗口的當前光標所在的行.
相似的還有 int getmaxx(stdscr) int getmaxy(stdscr) 獲得窗口的最大列數和行數.
顏色的簡單控制
概述
ncurses的顏色一樣使用命令開關的模式,使用ncurses的進程無論如何設置,使用的都是同一個終端,即便進程結束了,終端給其餘 進程使用了,這個終端也仍是一個終端.
ncurses開啓顏色後,須要將兩個顏色,前景色和背景綁定,生成一個顏色對,並給這個顏色對一個id,通個id來使用顏色對,能夠綁定多個顏色對,使用開啓關閉來控制.
bool has_colors()
判斷是否當前終端支持顏色顯示.
start_clolr()
開啓顏色顯示模式, 必須執行 執行之後纔可使用顏色顯示,不執行,默認並不開啓顏色顯示模式的.並無stop_color(), 在執行end_win的時候,統一將終端恢復到初始時的狀態.
init_pair(int id, front_color, back_color)
綁定一個顏色對,並標記爲id,這個綁定的顏色對,被記錄在ncurses的內部,id只是一個鍵值.ncurses預約義了八種屬性: COLOR_BLACK COLOR_RED COLOR_GREEN COLOR_YELLOW COLOR_BLUE COLOR_MAGENTA COLOR_CYAN COLOR_WHITE 若是這些顏色不滿意,能夠通個 init_color(COLOR_RED, 700, 0, 0) 自定義顏色(後面的參數是以1000爲基數的RGB), 經過 color_content() 和 pair_content() 查看當前的顏色設置狀況
attron(COLOR_PAIR(id))
開啓id這個顏色對,attron表示讓終端開啓一個屬性,COLOR_PAIR表示開啓一個顏色屬性,id是顏色屬性的參數, 開啓顏色屬性後,在使用輸出函數(printw, mvprintw等)時,就會打印對應的顏色. 一直有效,直到執行attroff
attroff(COLOR_PAIR(id))
關閉一個顏色屬性,以後,終端回覆到默認狀態,使用輸出語句輸出就正常了.