ncurses界面庫

ncurses界面庫

  1. 概述ios

    這是一個終端的圖形界面庫,補充gui的啊,在terminal上作東東,就實用來講,這個比gui還多了,輕便並且功能強悍 相似的庫:termios.h 這個文件能夠徹底的控制終端,終端本質上只是一種流設備,termios.h這個,是針對這個流設備的, 不僅針對界面的,其中,好比於界面毫無關係的波特率等設置.而ncurses是專門的界面庫. 在ncurses.h 中能夠找到跟本文介紹的相關函數.函數

  2. 缺點ui

    中文支持不是很好.spa

  3. 思想指針

    面向過程的想法,不斷的向系統發送命令,開啓,關閉模式,等,打到想要的效果.進程

  4. 依賴terminal

    -lncurses 最好使用 pkg-config –cflags –libs ncursesget

  5. 開啓和結束it

    開始ncurses模式,須要io

    initscr();

    返回一個WINDOWS指針,默認會使用stdscr.也能夠本身接收處理,用於有多個win的狀況.

    endwin();

    結束ncurses對終端的控制,終端仍是那個終端,只是運行initscr後,ncurses得到了對終端的控制,能夠理解爲ncureses釋放了終端.

    註解

    ncurses控制的是當前終端,使用ncurses的程序退出後,ncurses對終端的影響還會起做用,由於無論那個程序,使用的是 同一個終端,執行endwin,就避免了對下一個程序的影響,一般須要 atexit(func) 掛載一個退出鉤子,執行這個函數.

  6. 基本的終端設置

    在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是默認窗口,也能夠設置自定義的一塊窗口區域能夠滾動.或者不能滾動.

  7. 基本的輸入

    int c = getch()

    等待用戶輸入一個字符,輸入特殊鍵時,設置keypad後,c是轉行後的數字,沒有設置,

    就會返回幾個轉移字符. 注意返回的是int型.

    int c = wgetch(stdscr)

    等待用戶輸入.在一個 窗口 等待,這個窗口是ncurses的虛擬概念.用第一個好了.

  8. 基本的輸出

    printw(fmt, …)

    參數和printf是同樣的,只是把f換成了w,格式化輸出.這個默認是不會馬上顯示的.只是寫到

    了buff裏,想一想雙緩衝的概念,顯示一個,這裏寫的是另外一個.

    refresh()

    刷新界面,交換兩個緩衝區,馬上顯示,讓用戶本身定義什麼時候進行顯示,給用戶更大的自由度.

    mvprintw(int y, int x, fmt, …)

    這個也是輸出,是必定光標的輸入點後,在接收輸入字符.y 是第幾行,x 是第幾列.使用的 x 和 y 和窗口座標系 是一致的,只是行數的參數第一個是 y 第二個是 x .

  9. 座標的移動和肯定

    move(y ,x)

    移動座標到 y 行, x 列. 相似的還有 wmove(win, y, x) 移動一個win的光標.

    int getcurx(stdscr)

    獲得一個窗口的內的當前光標所在的列數.多個窗口的話修改stdscr就行了.

    int getcury(stdscr)

    獲得一個窗口的當前光標所在的行.

    相似的還有 int getmaxx(stdscr) int getmaxy(stdscr) 獲得窗口的最大列數和行數.

  10. 顏色的簡單控制

    概述

    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))

    關閉一個顏色屬性,以後,終端回覆到默認狀態,使用輸出語句輸出就正常了.

相關文章
相關標籤/搜索