curses是一个在
Linux/
Unix下广泛应用的
图形函数库,作用是可以在终端内
绘制简单的
图形用户界面。
简介
Linux/Unix编程给人的感觉就比较“cool”一点,好像Linux编程都是在黑黑的终端下进行的。确实是这样,许多Linux高手都喜欢在终端方式下工作,熟悉了一些命令以后,这样的工作方式效率还是很高的。但是长久地看着黑黑的屏幕难免让人感到厌倦,有没有一种工具能让我们在Linux下编出好看的图形呢?答案是肯定的,它就是curses!
美国伯克利大学的Bill Joy和Ken Arnold编写的,用来处理一个游戏rogue的屏幕显示。后来
贝尔实验室的Mark Horton在System III Unix中重新编写了curses。现在几乎所有的
Unix/Linux操作系统都带了curses函数库,curses也加入了对鼠标的支持,一些菜单和面板的处理。可以说,curses是
Linux终端图形编程的不二选择(比如著名的文字编辑器 vi 就是基于curses编的)。
安装
Ubuntu下安装方法:
sudo apt-get install libncurses5-dev
(如果发现找不到这个包,使用命令 sudo apt-get update 更新下包源)
用法
1. 包含头文件:curses.h
2. 编译时应加上链接语句-lcurses,如:gcc temp.c -o temp -lcurses
3. 重要的函数:
常用的初始化函数集合:
例子
首先我们应该了解,在终端使用的屏幕模式是基于文本的。所以在开始使用curses前,需要用initscr()函数初始化屏幕。对应的,程序结束需要调用endwin();函数来关闭curses状态。
呵呵, 刚才忘了说了. 我们调用curses库一般是用C语言的(没什么奇怪, C可以说是
Linux的官方语言, 不过你也可以用
C++或
Python等语言调用curses的, 这无关紧要). 假设我们把这个程序保存为 hello.c
不过不要急着用gcc -o hello hello.c去编译运行(我知道你会用
gcc:) 那样是不能通过编译的. 因为curses库不在标准路径上, 所以我们要加上 -lcurses连接选项, 像这样:
gcc -o hello hello.c -lcurses
现在你用 ./hello 运行一下程序看看,是不是出现了你所期望的窗口.
现在我们来一行行分析一下代码.
#include /*这是每个 curses 程序都必须包含的头文件,表明使用了curses库*/
然后
主函数中第一句initscr();初始化了屏幕, 使之开始进入curses图形化工作方式.
其实我们现在没有自己建立窗口, 用的是标准屏幕 stdscr(就象C里面标准输入
stdin, 标准输出
stdout一个概念), 它就是我们面前的电脑屏幕(不过现在还是黑黑的:)
屏幕分物理屏幕(我们所看到的)和逻辑屏幕(在内存中的), 我们调用
函数时修改的是逻辑屏幕,它不会在当前物理屏幕上显示出来.所以现在屏幕上还是什么也没有, 需要调用refresh()把我们对逻辑屏幕的改动在物理屏幕(显示器)上显示出来. 然后用
getch()让屏幕暂停一下.
最后调用endwin()结束curses, 恢复原来的屏幕.
好了, 我们完成了第一个例子的分析. 是不是挺简单的?
不过不尽如人意的是屏幕还是那个样子, 没有什么色彩. 要加色彩? 那也是挺容易的: 首先用start_color()函数开启
颜色模式, 然后设置我们要的颜色就行了.
curses里的颜色是配对的, 要一个
背景色对一个
前景色. 使用之前用init_pair()初始化.
比如init_pair(1, COLOR_BLUE, COLOR_GREEN);就定义了一组颜色, COLOR_BLUE为前景色, COLOR_GREEN为背景色. 1是它们的标记号码(供其他
函数调用时使用) 我们来看一个简单的例子:
这个程序假如保存为color.c
那么你可以这样编译了: gcc -o color color.c -lcurses
用./color一运行, 是不是有几个彩色的字? 呵呵, 虽然不好看, 但是说不定你自己以后可以用curses写出精美的程序.
ubuntu 用户 如果 没有 curses.h库,可以用一下命令下载:
apt-get install libncurses5-dev
如果想做更多了解,可以去下边网址看看:
http://www.ibm.com/developerworks/cn/aix/library/au-shellcurses/index.html