Linux下curses函数库
1.安装
  ubuntu11.10下默认没有安装curses函数库,(CentOS下默认已经安装,可以直接在usr/include下查看是否有该头⽂件来确定)使⽤
  >sudo apt-get install ncurses-dev
  安装curses库,这样在curses函数库的头⽂件和库⽂件就被分别安装在/usr/include/和/usr/lib/下,在编译程序时,直接使⽤命令:
  gcc program.c -o program -lcurses
  完成编译,运⾏。
2.curses术语和概念
  curses⼯作在屏幕,窗⼝和⼦窗⼝之上。屏幕是设备全部可⽤显⽰⾯积(对终端是该窗⼝内所有可⽤字符位置),窗⼝与具体例程有关。如基本的stdscr窗⼝等。
  curses使⽤两个数据结构映射终端屏幕,stdscr和curscr。stdscr是“标准屏幕”(逻辑屏幕),在curses函数库产⽣输出时就刷新,是默认输出窗⼝(⽤户不会看到该内容)。curscr是“当前屏幕”(物理屏幕),在调⽤refresh函数是,函数库会将curscr刷新为stdscr的样⼦。
  使⽤initscr();和endwin();两个函数对函数库进⾏初始化和重置。
#include<curses.h>
WINDOW *initscr(void);
int endwin(void);
3.屏幕
  函数基本分为如下⼏类:
  输出到屏幕:
1int addch(const chtype char_to_add);
2int addchstr(chtype *const string_to_add);    //当前位置添加字符(串)
3
4int printw(char *format, ...);  //类似与printf
5int refresh(void);    //刷新物理屏幕
6int box(WINDOW *win_ptr, chtype vertical, chtype horizontal);  //围绕窗⼝绘制⽅框
7int insch(chtype char_to_insert);  //插⼊⼀个字符(已有字符后移)
8int insertln(void);  //插⼊空⽩⾏
9int delch(void);
10int deleteln(void);  //删除字符和空⽩⾏
11
12int beep(void);  //终端响铃
13int flash(void);  //闪烁
  从屏幕读取字符;
1 chtype inch(void);  //返回光标位置字符
2int instr(char *string);  //
3int innstr(char *string, int numbers);  //将返回内容写⼊字符数组中
  清除屏幕;
int erase(void);  //在屏幕的每个位置写上空⽩字符
int clear(void);    //使⽤⼀个终端命令来清除整个屏幕,内部调⽤了clearok来执⾏清屏操作,(在下次调⽤refresh时可以重现屏幕原⽂)
int clrtobot(void);  //清除光标位置到屏幕结尾的内容
int clrtoeol(void);    //清除光标位置到该⾏⾏尾的内容
  移动光标;
int move(int new_y, int new_x);    //移动stdcsr的光标位置
  字符属性(指对字符设置加粗,反⾊显⽰等);
  预定义的属性:A_BLINK, A_BOLD, A_DIM, A_REVERSE, A_STANDOUT, A_UNDERLINE.
int attron(chtype attribute);
int attroff(chtype attribute);  //启⽤或关闭某属性
int attrset(chtype attribute);
int standout(void);
int standend(void);          //这两个表⽰更加通⽤的强调模式,通常映射为反⽩显⽰
4.键盘
  键盘模式:
int echo();
int noecho();  //⽤于开启和关闭键盘输⼊字符的回显
/
/完成initscr后,输⼊模式为预处理模式,(1)所有处理是基于⾏的,就是说,只有按下回车,输⼊数据才被传给程序;(2)键盘特殊字符启⽤,按下合适组合键会产⽣信号int cbreak();  //设置cbreak模式,字符⼀键⼊,直接传给程序
int nocbreak();  //关闭
int raw();    //关闭特殊字符处理
int noraw();  //同时回复默认模式和特殊字符处
  键盘输⼊:
//与标准io库的getchar, gets, scanf类似
int getch();
int getstr(char *string);
int getnstr(char *string, int number);  //建议使⽤
int scanw(char*format,...);
5.窗⼝
 curses函数库⽀持在⼀个物理屏幕上显⽰多个窗⼝。
  5.1 WINDOW结构
  从前⾯initscr返回可以看到,标准屏幕stdscr实际上就是WINDOW结构的,它的作⽤类似与标准输出stdout。所以可以使⽤下⾯函数⾃⼰创建和销毁窗⼝。
WINDOW *newwin(int lines, int cols, int start_y, int start_x);  //创建从(start_y, start_x)开始的lines⾏,cols列的窗⼝。
int delwin(WINDOW *window);  //销毁上⾯创建的窗⼝,千万不要删除stdscr和curscr!
  当lines和cols为0时,说明新窗⼝右下⾓落在屏幕右下⾓上。
  5.2 通⽤函数
  前⾯的addch和printw函数⽤于在屏幕上增加字符,它们都可以通过增加前缀变为通⽤函数。
  前缀w⽤于窗⼝(添加⼀个WINDOWS指针参数),mv⽤于光标移动(在该位置执⾏操作addch或printw)
(添加两个坐标值参数),mvw ⽤于在窗⼝中移动光标。组成如下函数:
  addch, waddch, mvaddch, mvwaddch
  printw, wprintw, mvprintw, mvwprintw
  5.3移动和更新窗⼝
int mvwin(WINDOW *win, int new_y, int new_x);  //移动窗⼝
int wrefresh(WINDOW *win);
int wclear(WINDOW *win);
int werase(WINDOW *win);
//类似于上⾯的refresh, clear, erase,但是此时针对特定窗⼝操作,⽽不是strcsr
int touchwin(WINDOW *win);    //指定该窗⼝内容已改变
int scrollok(WINDOW *win, bool flag);    //指定是否允许窗⼝卷屏
int scroll(WINDOW *win);  //把窗⼝内容上卷⼀⾏
6.⼦窗⼝
WINDOW *subwin(WINDOW *parent, int lines, int cols, int start_y, int start_x);  //创建⼦窗⼝。
int delwin(WINDOW *window);  //销毁⼦窗⼝
  ⼦窗⼝除了没有⾃⼰的屏幕字符存储空间外,其他与新窗⼝相同。
  主要⽤于卷动另⼀窗⼝只能个的部分内容,将这部分区域设为⼦窗⼝,然后卷动即可
linux字符串转数组7.keypad模式
  第4部分看到了curses提供了处理键盘的功能。另外,键盘⼀般还会有⽅向键,功能键,数字⼩键盘,Insert,  Home等按键。这些键会发送以"\"(转义字符)开头的字符串序列。解码这些键就要区分“单独按下\键”和“按下功能键⽽产⽣\开头的字符串序列”,
  在curses函数库中,头⽂件curses.h提供了⼀组以KEY_为前缀的定义来管理逻辑键。
  curses在启动时会关闭转义序列与逻辑键之间的转换功能,需要调⽤如下函数开启:
int keypad(WINDOW *win, bool keypad_on);    //keypad_on参数为true时,启⽤keypad模式。此时读键盘操作能够返回⽤户在按下逻辑键时对应的KEY_定义
8.彩⾊显⽰
  curses能显⽰简单的彩⾊。必须同时定义⼀个字符的前景⾊和背景⾊,称为颜⾊组合。使⽤⽅法如下:
  ⾸先,检查终端是否⽀持彩⾊显⽰,然后对curses颜⾊例程初始化:
bool has_colors(void);
int start_color(void);
  若start_color成功返回OK,变量COLORS定义为可⽤颜⾊数⽬,⼀般为8种,COLOR_PAIRS定义为可⽤颜⾊组合数⽬,⼀般为64种。int init_pair(shor pair_number, short foreground, short background);    //初始化pair_number号颜⾊组合
int COLOR_PAIR(int pair_number);  //对pair_number号颜⾊组合作为属性来访问(⽤于前⾯的attr函数)
int pair_content(short pair_number, short *foreground, short *background);    //获取已定义的颜⾊组合信息
更详细的参考:——《NCURSES Programming HOWTO》
       ——ncurses
参考:Beginning Linux Programming, 《Linux程序设计》

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。