■ 应用完整□例 下面所举的例子, 即完全利用刚刚所介绍的含式来完成.这个程式可将从键 盘上读取的字元显示在萤幕上, 并且可以上下左右方向键来控制游标的位置 , 当按下 [ESC] 後, 程式即结束. 您有没有发现, 这不就是一个简单全萤幕编辑器的雏形吗? #include <curses.h> /* 引进 curses.h , 并自动引进 stdio.h */ #define StartX 1 /* 决定游标初始位置 */ #define StartY 1 void initial(); main() { int x=StartX; /* 宣告 x,y 并设定其初值 */ int y=StartY; int ch; /* 宣告 ch 为整数,配合 getch() 使用 */ initial(); /* 呼叫 initial(), 启动 curses 模式, */ /* 并完成其它设定 */ box(stdscr,'|','-'); /* 画方框 */ attron(A_REVERSE); /* 开启反白模式 */ mvaddstr(0,20,"Curses Program"); /* 在 (20,0) 处输出反白字元 */ attroff(A_REVERSE); /* 关闭反白模式 */ move(x,y); /* 将游标移至初始位置 */ do { /* 以无限回圈不断等待输入 */ ch=getch(); /* 等待自键盘输入字元 switch(ch) { /* 判断输入字元为何 */ case KEY_UP: --y; /* 判断是否"↑"键被按下 */ break; case KEY_DOWN: ++y; /* 判断是否"↓"键被按下 */ break; case KEY_RIGHT: ++x; /* 判断是否"→"键被按下 */ break; case KEY_LEFT: --x; /* 判断是否"←"键被按下 */ break; case '\r': /* 判断是否 ENTER 键被按下 */ ++y; x=0; break; case '\t': /* 判断是否 TAB 键被按下 */ x+=7; break; case 127: /* 判断是否 BACKSPACE 键被按下 */ mvaddch(y,--x,' ');/* delete 一个字元 */ break; case 27: endwin(); /* 判断是否[ESC]键被按下 */ exit(1); /* 结束 curses 模式 */ /* 结束此程式 */ default: addch(ch); /* 如果不是特殊字元, 将此字元印 出 */ x++; break; } move(y,x); /* 移动游标至现在位置 */ } while (1); } void initial() /* 自定开启 curses 函式 */ { initscr(); cbreak(); nonl(); noecho(); intrflush(stdscr,FALSE); keypad(stdscr,TRUE); refresh(); } ■ 後记 学完了上述的一些命令, 相不相信您已经可以写出一个漂亮的全萤幕编辑 器了? 事实上, curses 提供的函式不下 200 个, 可是笔者认为, 一切再 复杂的函式都可以用本文提到的一些组合变化而成, 学了太多的函式, 只 是徒增自己困扰罢了. 当然, 如果您对其它函式有兴趣, 可以自行参阅 curses 说明档. ( 方法: % man curses ) 本文不过行抛砖引玉之效, 也 希望未来能陆续出现更多同学自行创作的程式. * 任何疑问及建议, 欢迎 e-mail 至 ljh@CCCA.NCTU.edu.tw. 谢谢 ! * 注一: 请参考 /usr/share/lib/termcup /usr/share/lib/terminfo/s/sun 注二: 1.如果是 BSD 的版本, 需使用 cc [file.c] -lcurses -ltermcap 来完成 compile. 2.计中工作站不知何故将原来的 /usr/5bin/cc 更改为 /usr/5bin/cc.org 因此, 您若想在计中工作站 compile curses 程式.需以 /usr/5bin/cc. org 取代 /usr/5bin/cc , 否则 compile 可能发生错误. 3.较旧版的 curses 需同时引进 curses 和 termlib 这两个 library, 因此, 您必须使用 /usr/5bin/cc [file.c] -lcurses -ltermlib 来 compile. 注三: 根据笔者的经验, 上下左右方向键应可正常使用而不会发生问题, 但其它 如 PgUp,PgDn,功能键,Home,End 等特殊键, 很容易因机器, 键盘不同而无 法使用, 因此, 若您的程式须要在不同的机器上使用, 建议您只用方向键来 控制, 其它的特殊键少用为妙. 至於 PgUp,PgDn 一些特殊键的控制方法, 由於较为复杂, 有兴趣的同学可 参 考 tin 原始程式 curses.c 内所使用的一些方法. -- (
类别:图形编程 查看评论