- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
ncurse库使用
用curses库有个特点,就是要初始化一个窗口用函数initscr();后面要用函数endwin来说明窗口结束!
我们现在知道了:在程序中调用initscr()函数,会让屏幕初始化并进入CURSES模式。还有一些其它的函数可以根据我们自己的方案初始化CURSES。不同的初始化函数可以让屏幕进入不同的显示模式。比如:终端模式(terminal mode)、彩色模式(color mode)、鼠标模式(mouse mode)等等……
通常情况下,用户输入的字符将被终端程序送入终端的缓冲区。但当用户输入换行符时,终端程序将会中断,同时输出当前的缓冲区内容并启用新行的输出缓冲。但是大多数程序需要当用户输入单个字符时,却希望这些字符能够立即显示在屏幕上。这两个函数就是用来禁用行缓冲(line buffering)。这两个函数所初始化的的模式同样可以用来给程序传送控制字符,比如:挂起(CTRL-Z)、中断或退出(CTRL-C)。区别在于,在raw()函数模式下,这些字符将传送给程序去处理而不作为终端程序处理的信号。在cbreak()模式下,这些控制字符将被认为是终端驱动程序中的控制字符,因而将这些字符传送给终端程序。我比较喜欢使用raw(),那样可以进行更多的控制操作。
这两个函数控制用户输入的键盘回显。就是在运行程序的时候是否将输入的字符出现在屏幕上。比如你的程序在运行时你需要使用控制字符,但是你不想让控制字符出现在屏幕上,就可以使用这两个函数。也就是说当用户调用getch()函数向程序输入数据时,你不想让他输入的字符出现在屏幕上。noecho()函数就可以不让控制字符(比如CTRL-C)出现在屏幕上。大多数的交互式程序要进入控制模式的时候,一般都使用echo()、noecho()函数初始化、关闭键盘回显。这样给了程序员更大的灵活性。
这个函数允许使用功能键:F1、F2、方向键等等……几乎所有的交互式程序都使用这个函数。令用户使用方向键控制整个用户界面。使用keypad(stdscr,TURE)就可以在“标准显示设备”(stdscr)上使用这些功能。在以后的章节中将详细讨论如何使用功能键。
这个函数虽然不经常使用。但有时却非常有用。halfdelay()函数会启用半延时模式(half-delay mode)。和cbreak()函数一样,当程序需要当用户输入这些字符时,它们能够立即显示在屏幕上。但是它要停滞一段限定时间(以0.1秒为单位)等待输入,如果没有有效的输入,返回ERR。给halfdelay()传递一个整型参数(以0.1秒为单位)。它就会按照参数中的时间等待用户输入。一般来说,这个函数在需要等待的输入的程序中可以被用到,如果用户没有及时做出响应,程序就可以去处理其它的事情了。最常见到的应用例子是在输入密码的出超时响应。
上面的提到的这些函数可以定制CURSES在初始化后的行为。这些函数不能被广泛使用在程序的各个部分。所以,这些函数的调用要处在整个CURSES会话的开始部分。
一个例子
让我们写一个程序用来说明这些函数的用法。
例2. 初始化函数用法的示例:
#include ncurses.h;
int main()
{
int ch;
initscr(); /* 开始curses模式 */
raw(); /* 禁止行缓冲 */
keypad(stdscr, TRUE); /* 开启功能键响应模式 */
noecho(); /* 当执行getch()函数的时候关闭键盘回显 */
printw(Type any character to see it in bold\n);
ch = getch(); /* 如果没有调用raw()函数,必须先按下enter键才可以执行下面的程序 */
if(ch == KEY_F(1)) /* 如果没有调用keypad()初始化,将不会执行这条语句 */
printw(F1 Key pressed); /* 如果没有使用 noecho() 函数,一些难看的控制字符将会被打印到屏幕上 */
else {
printw(The pressed key is );
attron(A_BOLD);
printw(%c, ch);
attroff(A_BOLD);
}
refresh(); /* 将缓冲区的内容打印到的显示器上 */
getch(); /* 等待用户输入 */
endwin(); /* 结束curses模式 */
return 0;
}
这个程序很简单,不需要太多的说明。但还是有一些前面没有提到的函数。getch()函数用来取得用户输入的信息。它和通常的getchar()函
文档评论(0)