1 curses开发包初接触
~~~~~~~~~~~~~~~~~~~~~
1.1 curses包内容
=================
* curses.h
主要控制屏幕的输入和输出,光标的操作,窗口的创建和操作等
* panel.h
类似窗口堆栈,不同窗口可以存放其中,并且可以在其中进行移动
* menu.h
主要包括创建菜单并且与之交互的函数,主要用来接受用户的选择
* form
包括创建表单以及与之交互的函数,主要用来接受用户数据输入
1.2 开始使用curses包
=====================
1.2.1 curses初始化
-------------------
* 一般情况下在其余的cuses函数被调用前就必须先调用initscr().
* stdscr和curscr的不同在于
* stdscr代表的是逻辑屏幕
* curscr代表的是物理屏幕
* wfresh函数会根据stdscr和curscr之间的差异更新物理屏幕
* 如果程序使用多个终端
* 使用newterm()代替initscr()
* 对于每个希望与之交互的终端都调用一次newterm()
* newterm()返回一个SCREEN结构用来引用某个终端
* 在需要从某个终端接受输入和输出的时候,必须通过set_term(SCREEN)来将它设置成当前终端
1.2.2 终端模式设置
-------------------
* 终端模式实际上是一系列开关的属性,它们直接影响着终端如何处理输入以及输出.
* keypad(stdscr,TRUE)
用来控制是否将键盘上的特殊字符转换成curses包中的对应特殊键
* nonl()
用来控制程序将回车键不要转换成换行符
* cbreak()
读取除了DELETE或CTRL等特殊字符以外的所有字符
* noecho()
使键盘输入的字符不需要直接在屏幕上显示
1.2.3 颜色处理
---------------
* 使用函数has_colors()判断终端是否支持彩色
* 使用init_pair(0,COLOR_GREEN,COLOR_BLACK)初始化颜色配对表,设置字符的前景色和背景色
* 使用attron(A_BLINK|COLOR_PAIR(2))设置要显示的字符如何显示
1.2.4 使用refresh和wrefresh进行屏幕更新
----------------------------------------
* refresh其实是wrefresh(stdscr)的宏定义
1.2.5 使用endwin()函数中断curses程序
-------------------------------------
* endwin()是程序最后调用的一个函数,与initscr()相呼应
* endwin()执行后,光标移动到屏幕的左下方
1.3 编译
=========
* 如果程序使用了panel,menu,form等库,-lcurses选项必须在其余的选项之后
1.4 例子
=========
#include <curses.h>
static void finish(int sig);
int main()
{
initscr();
keypad(stdscr,TRUE);
nonl();
cbreak();
noecho();
if(has_colors())
{
start_color();
init_pair(0,COLOR_BLACK,COLOR_BLACK);
init_pair(1,COLOR_GREEN,COLOR_BLACK);
init_pair(2,COLOR_RED,COLOR_BLACK);
init_pair(3,COLOR_CYAN,COLOR_BLACK);
init_pair(4,COLOR_WHITE,COLOR_BLACK);
init_pair(5,COLOR_MAGENTA,COLOR_BLACK);
init_pair(6,COLOR_BLUE,COLOR_BLACK);
init_pair(7,COLOR_YELLOW,COLOR_BLACK);
}
attron(A_BLINK|COLOR_PAIR(2));
move(LINES/2+1,COLS-4);
addstr("Eye");
refresh();
sleep(2);
move(LINES/2-3,COLS/2-3);
addstr("Bulls");
refresh();
sleep(2);
finish(0);
}
static void finish(int sig)
{
endwin();
exit(0);
}
本文出自 “暗日” 博客,请务必保留此出处http://darksun.blog.51cto.com/3874064/1281711