linux添加curse库,Linux中添加curse.h库函数(copyhttp://www.cnblogs.com/dandingyy/archive/2012/08/23/2651644.htm...

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();两个函数对函数库进行初始化和重置。

#includeWINDOW*initscr(void);int endwin(void);

3.屏幕

函数基本分为如下几类:

输出到屏幕:

a4c26d1e5885305701be709a3d33442f.png

1 int addch(constchtype char_to_add);2 int addchstr(chtype *const string_to_add); //当前位置添加字符(串)

3

4 int printw(char *format, ...); //类似与printf

5 int refresh(void); //刷新物理屏幕

6 int box(WINDOW *win_ptr, chtype vertical, chtype horizontal); //围绕窗口绘制方框

7 int insch(chtype char_to_insert); //插入一个字符(已有字符后移)

8 int insertln(void); //插入空白行

9 int delch(void);10 int deleteln(void); //删除字符和空白行

11

12 int beep(void); //终端响铃

13 int flash(void); //闪烁

a4c26d1e5885305701be709a3d33442f.png

从屏幕读取字符;

1 chtype inch(void); //返回光标位置字符

2 int instr(char *string); //3 int 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.

intattron(chtype attribute);int attroff(chtype attribute); //启用或关闭某属性

intattrset(chtype attribute);int standout(void);int standend(void); //这两个表示更加通用的强调模式,通常映射为反白显示

4.键盘

键盘模式:

a4c26d1e5885305701be709a3d33442f.png

intecho();int noecho(); //用于开启和关闭键盘输入字符的回显//完成initscr后,输入模式为预处理模式,(1)所有处理是基于行的,就是说,只有按下回车,输入数据才被传给程序;(2)键盘特殊字符启用,按下合适组合键会产生信号

int cbreak(); //设置cbreak模式,字符一键入,直接传给程序

int nocbreak(); //关闭

int raw(); //关闭特殊字符处理

int noraw(); //同时回复默认模式和特殊字符处

a4c26d1e5885305701be709a3d33442f.png

键盘输入:

//与标准io库的getchar, gets, scanf类似

intgetch();int getstr(char *string);int getnstr(char *string, intnumber);  //建议使用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移动和更新窗口

a4c26d1e5885305701be709a3d33442f.png

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); //把窗口内容上卷一行

a4c26d1e5885305701be709a3d33442f.png

6.子窗口

WINDOW *subwin(WINDOW *parent, int lines, int cols, int start_y, int start_x); //创建子窗口。

int delwin(WINDOW *window); //销毁子窗口

子窗口除了没有自己的屏幕字符存储空间外,其他与新窗口相同。

主要用于卷动另一窗口只能个的部分内容,将这部分区域设为子窗口,然后卷动即可

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); //获取已定义的颜色组合信息更详细的参考:http://tldp.org/HOWTO/NCURSES-Programming-HOWTO/——《NCURSES Programming HOWTO》

参考:Beginning Linux Programming, 《Linux程序设计》

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值