在UNIX下如何用C语言保存和恢复屏幕(3)
来源:asp之家 时间:2010-05-20 18:24:00
■ 其他常用的一些函式
beep() 发出一声哔声
box(win,ch1,ch2) 自动画方框 ch1: 画方框时垂直方向所用字元
ch2: 画方框时水平方向所用字元
example: box(stdscr,'|','-');
将以 | 及 - 围成一个方框
■ 应用完整□例
下面所举的例子, 即完全利用刚刚所介绍的含式来完成.这个程式可将从键
盘上读取的字元显示在萤幕上, 并且可以上下左右方向键来控制游标的位置
, 当按下 [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();
}