UNIX图形编程函数库

上传人:l**** 文档编号:134546335 上传时间:2020-06-06 格式:DOC 页数:27 大小:74.50KB
返回 下载 相关 举报
UNIX图形编程函数库_第1页
第1页 / 共27页
UNIX图形编程函数库_第2页
第2页 / 共27页
UNIX图形编程函数库_第3页
第3页 / 共27页
UNIX图形编程函数库_第4页
第4页 / 共27页
UNIX图形编程函数库_第5页
第5页 / 共27页
点击查看更多>>
资源描述

《UNIX图形编程函数库》由会员分享,可在线阅读,更多相关《UNIX图形编程函数库(27页珍藏版)》请在金锄头文库上搜索。

1、- UNIX 图形编程函数库(c语言) - curses(一)- 前言 相信您在网路上一定用过如tin,elm 等工具, 这些软体有项共同的特色, 即他们能利用上下左右等方向键来控制游标的位置.除此之外, 这些程式 的画面也较为美观. 对 Programming 有兴趣的朋友一定对此感到好奇, 也 许他能在 PC 上用 Turbo C 轻易地写出类似的程式, 然而, 但当他将相同 的程式一字不变地移到工作站上来编译时, 却出现一堆抓也抓不完的错误. 其实, 原因很简单, 他使用的函式库可能在 UNIX 上是没有定义的.有些 在 Turbo-C 上被广泛使用的一些函式, 可能在 UNIX 上是不

2、被定义的. 为了因应网路上各式各样的终端机形态(terminal), UNIX 上特别发展出 一套函式库, 专门用来处理 UNIX 上游标移动及萤幕的显示.这就是本篇 文章要为您介绍的 - curses.h 函式库.利用这个函式库, 您也可以写出 像 elm 般利用方向键来移动光棒位置的程式. (CCCA 近来所提供的线上选 课程式, 及程式服务界面, 即是笔者利用 curses 发展而成的 ) curses 的历史与版本 cureses 最早是由柏克莱大学的 Bill Joy 及 Ken Arnold 所发展出来的. 当时发展此一函式库主要原因是为了提高程式对不同终端机的相容性而设 计的.因

3、此, 利用 curses发展出来的程式将和您所使用的终端机无关. 也就是说, 您不必担心您的程式因为换了一部终端机而无法使用.这对程 式设计师而言, 尤其是网路上程式的撰写, 是件相当重要的一件事. curses之所以能对上百种以上的终端机工作,是因为它将所有终端机的资 料, 存放在一个叫 termcap 的资料库, ( 而在第二版的 System V 系统中 , 新版的 curses 以 terminfo 取代原来的 termcap). 有了这些记录, 程 式就能够知道遇到哪一种终端机时, 须送什麽字元才能移动游标的位置, 送什麽字元才能清除整个萤幕清除. (* 注一) 另外, 本文的介绍

4、以 System V 的 curses 版本为主. 如何在您的程式使用 curses ? 在您的 C 程式的档头将; include 进来.当您引进curses.h 这个函式库後, 系统会自动将 ; 和 ;一并include 进 来.另外,在SystemV版本中, ;这个函式库也将一并 include进来. #include ; main() : : 当然, 您的系统必须放有 curses.h 这个函式库. 如何编译(compile) 当您编辑好您的程式, 在 UNIX 提示符号下键入: % /usr/5bin/cc file.c -lcurses 引进 curses.h 这个 library

5、 或 % /usr/5bin/cc file.c -lcurses -ltermlib (*注二) 如何开始我的第一个 curses 程式? 在开始使用 curses 的一切命令之前, 您必须先利用initscr()这个函式 来开启 curses 模式. 相对的, 在结束curses模式前( 通常在您结束程式前)也必须以 endwin()来关闭 curses 模式. #include ; main() initscr(); : : : endwin(); 这是一般 curses 程式标准的模式. 此外, 您可以就您程式所须, 而做不同的设定. 当然, 您可以不做设定,而 只是呼叫 initsc

6、r(). 您可以自己写一个函式来存放所有您所须要的设定.平常使用时, 只要呼 叫这个函式即可启动 curses 并完成一切设定. 下面的例子, 即是笔者将平常较常用的一些设定放在一个叫 initial()的函 式. void initial() initscr(); cbreak(); nonl(); noecho(); intrflush(stdscr,FALSE); keypad(stdscr,TRUE); refresh(); 各函式分别介绍如下: initscr() initscr()是一般 curses 程式必须先呼叫的函数, 一但这个函数 被呼叫之後, 系统将根据终端机的形态并启动

7、 curses 模式. endwin() curses 通常以呼叫 endwin() 来结束程式.endwin() 可用来关闭 curses 模式, 或是暂时的跳离curses 模式.如果您在程式中须要 call shell ( 如呼叫 system() 函式 ) 或是需要做 system call, 就必须先以 endwin() 暂时跳离 curses模式. 最後再以 wrefresh() doupdate() 来重返 curses 模式. cbreak() nocbreak() 当 cbreak模式被开启後, 除了 DELETE 或 CTRL 等仍被视为特殊 控制字元外一切输入的字元将立刻

8、被一一读取.当处於 nocbreak 模 式时, 从键盘输入的字元将被储存在buffer 里直到输入RETURN 或 NEWLINE.在较旧版的 curses 须呼叫 crmode(),nocrmode() 来 取代 cbreak(),nocbreak() nl() nonl() 用来决定当输入资料时, 按下 RETURN 键是否被对应为 NEWLINE 字 元 ( 如 n ). 而输出资料时, NEWLINE字元是否被对应为RETURN 和 LINDFEED 系统预设是开启的. echo() noecho() 此函式用来控制从键盘输入字元时是否将字元显示在终端机上.系统 预设是开启的. in

9、trflush(win,bf) 呼叫 intrflush 时须传入两个值: win 为一 WINDOW 型态指标, 通常传入标准输出入萤幕 stdscr bf 为 TRUE 或 FALSE 当 bf 为 true 时, 当输入中断字元 ( 如 break) 时, 中断的反应 将较为快速.但可能会造成萤幕的错乱. keypad(win,bf) 呼叫 keypad 时须传入两个值: win 为一 WINDOW 型态指标, 通常传入标准输出入萤幕 stdscr bf 为 TRUE 或 FALSE 当开启keypad 後, 可以使用键盘上的一些特殊字元, 如上下左右 等方向键, curses 会将这些

10、特殊字元转换成 curses.h 定义的一 些特殊键. 这些定义的特殊键通常以 KEY_ 开头. refresh() refresh() 为 curses 最常呼叫的一个函式. curses 为了使萤幕输出入达最佳化, 当您呼叫萤幕输出函式企图改 变萤幕上的画面时, curses并不会立刻对萤幕做改变,而是等到 refresh() 呼叫後, 才将刚才所做的变动一次完成.其馀的资料将 维持不变. 以尽可能送最少的字元至萤幕上. 减少萤幕重绘的时间. 如果是 initscr() 後第一次呼叫refresh(), curses 将做清除萤 幕的工作. 游标的控制 move(y,x) 将游标移动至 x,y 的位置 getyx(win,y,x)得到目前游标的位置 (请注意! 是 y,x 而不是 &y,&x ) 有关清除萤幕的函式 clear() erase() 将整个萤幕清除 (请注意配合refresh() 使用) 如何在萤幕上显示字元 echochar(ch) 显示某个字元 addch(ch) 显示某个字元 mvaddch(y,x,ch) 在(x,y) 上显示某个字元 相当於呼叫 move(y,x);addch(ch); addstr(str) 显示一串字串 mvaddstr(y,x,str) 在(x,y) 上显示一串字串

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 工作范文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号