fedora20,安裝yum install ncurses-devel
編譯時:-lncurses
頭文件:#include<curses.h>
參考:man ncurses \linux程序設計
一,屏幕
1, 以initscr()開始,以endwin();結束
WINDOW *initscr(void); //初始化
int endwin(void); // 退出curses, 返回OK/ERR
2, 輸出到屏幕
int addch(const chtype ch); //當前位置add ch
int addchstr(chtype *const str); //當前位置add str
int printw(char *format,...); //類printf,格式化輸出
int refresh(void); //刷新物理屏,更改邏輯屏,必須刷新才能在物理屏上面顯示
int box(WINDOW *ptr, chtype v_ch, chtype h_ch); //圍繞ptr指定窗口畫方框,垂直/水平方向字符v_ch/h_ch
int insch(chtype ch); //插入ch,右移
int insertln(void); //插入空白行,下移
int delch(void); //刪除光標位置字符,左移
int deleteln(void) //刪除當前行,上移
int beep(void); //發聲
int flash(void); //閃屏
3,從屏幕讀取
chtype inch(void); //讀取光標位置字符
int instr(char *string); //讀取字符串到str,到NUL,不總是被支持
int innstr(char *str, int n_of_str); //讀取n個字符到str,或NUL,不總是被支持
4,清除屏幕
int erase(void); //清屏,以空白字符填充
int clear(void); //清屏
int clrtobot(void); //清至屏幕結尾
int clrtoeol(void); //清至行尾
5,移動光標
int move(int new_y, int new_x); //y垂直方向,x水平方向
int leaveok(WINDOW *ptr, bool lf); //false,刷新後,硬件光標位置同邏輯光標;true,刷新後,硬件光標隨機位置。一般默認選項符合用戶需求。
6,字符屬性
int attron(chtype attr); //啟動指定屬性(不影響其他)
int attroff(chtype attr); //關閉指定屬性(不影響其他)
attrset(chtype attr); //設置字符屬性
int standout(void); //“突出“模式,開
int standend(void); //“突出“模式,關
A_NORMAL
A_STANDOUT
A_UNDERLINE
A_REVERSE
詳細man curs_attr
二,鍵盤
1, 鍵盤模式
int echo(void); //輸入字符回顯,開啟
int noecho(void); // 關閉
int cbreak(void); //cbreak模式,鍵盤輸入立即處理,開啟;默認cooked模式,回車後處理
int nocbreak(void); // 關閉
int raw(void); // 關閉特殊字符的處理功能,開啟;
int noraw(void); // 關閉,同時關閉raw,cbreak
2, 鍵盤輸入
int getch(void);
int getstr(char *str);
int getnstr(char *str, int n_of_str);
int scanw(char *format,...);
三,窗口
1,WINDOW結構
WINDOW *newwin(int n_of_lines, int n_of_cols, int start_y, int start_x); //新建窗口
int delwin(WINDOW *ptr); //銷毀窗口
2,通用函數
例子:
int addch(const chtype ch);
int waddch(WINDOW *ptr, const chtype ch);
int mvaddch(int y, int x, const chtype ch);
int mvwaddch(WINDOW *ptr, int y, int x, const chtype ch);
前綴w用於窗口、mv用於光標移動,mvw用於在窗口中移動光標
其他許多函數,都有類似通用函數,man ncurses查看
3,移動和更新窗口
int mvwin(WINDOW *ptr ,int new_y, int new_x);
int wrefresh(WINDOW *ptr);
int wclear(WINDOW *ptr);
int werase(WINDOW *ptr);
int touchwin(WINDOW *ptr); //通知curses函數庫,ptr指定窗口發生變化,下次wrefresh時,需重繪窗口。利用該函數,安排要顯示的窗口
int scrollok(WINDOW *ptr, bool sf); //true,允許窗口卷屏。默認不允許
int scroll(WINDOW *ptr); //調用scrollok後,再調用scroll,把窗口內容上卷一行。
4,優化屏幕刷新
int wnoutrefresh(WINDOW *ptr);
int doupdate(void);
四,子窗口
WINDOW *subwin(WINDOW *parent, int n_of_lines, int n_of_cols, int start_y, int start_x);
int delwin(WINDOW *ptr);
使用子窗口前,必須對其父窗口調用touchwin函數
五,keypad模式
int keypad(WINDOW *ptr, bool keypad_on);
六,彩色顯示
bool has_colors(void); //支持彩色顯示,則返回true,否則false
int start_color(void); //初始化彩色顯示功能,OK/ERR
int init_pair(short pair_number, short foreground, short background); //eg: init_pair(1,COLOR_RED,COLOR_GREEN),將紅色前景綠色背景定義為一號顏色組合。
int COLOR_PAIR(int pair_number); //eg: COLOR_PAIR(1),作為屬性來訪問,同A_BOLD
int pair_content(short pair_number, short *foreground, short *background); //和init_pair相反,通過顏色組合號,來獲得顏色。
COLOR_BLACK RED GREEN YELLOW BLUE MEGENTA品紅 CYAN藍綠色 WHITE
int init_color(short color_number, short red, short green, short blue); //通過red green blue組合顏色
七,pad
所有執行寫窗口操作的curses函數同樣可用於pad
WINDOW *newpad(int n_of_lines, int n_of_columns); //創建邏輯屏幕,可以大於物理屏幕,兩個參數代表邏輯屏幕大小,返回指向WINDOW結構的指針
int prefresh(WINDOW *pad_ptr, int pad_row, int pad_column,
int screen_row_min, int screen_col_min, int screen_row_max,int screen_col_max);
pad_ptr指針,newpad返回的指針;
pad_row, pad_column,指定pad上位置
screen_row_min, screen_col_min
screen_row_max, screen_col_max,指定物理屏幕顯示區域
pnoutrefresh函數,作用與wnoutrefresh函數一樣,為了更有效地刷新屏幕。
八,更多函數參考 man ncurses