在UNIX下如何用C语言保存和恢复屏幕(5)
来源:asp之家 时间:2010-05-20 18:24:00
■ 视窗内的座标系
视窗内的座标系, 将以此视窗的起始点为新原点, 并以其相对位置作为新的
座标. 举例来说
win=newwin(10,20,5,5);
wmove(win,2,3);
将以 (5,5) 为新原点, y 方向移动 2 单位, x 方向移动 3 单位. 因此实际
上, 游标将移动至 y=7 x=8 的位置上.
■ POP-UP 视窗的建立
利用 curses 所提供的视窗处理函式, 我们可以做出像 ONLINE HELP 的 POP
-UP 画面. 当按下某键後, 一个新的视窗将像 " 跳 " 出来一般覆盖原来的画
面. 当关掉此视窗後, 又不会影响到原来被覆盖的画面.
下面的例子, 我们及模拟 ONLINE HELP 的形式, 当按下 'h' 键时, 视窗即出现
#include <curses.h>
main()
{
int ch,x,y;
WINDOW *win;
initscr(); ←┐
cbreak; │ 启动 curses 模式
noecho(); │
nonl(); ←┘
win=newwin(4,30,LINES/2-3, COLS/2-15);/* 建立一个新视窗, 其中LINES,COLS
*/
box(win,'|','-'); /* 为 curses 内定值,即萤幕行/列数*/
mvwaddstr(win,1,4,"This is another screen");
mvwaddstr(win,2,2,"Press anykey to continue..");
for (y=0;y<LINES;++y) /* 以'@'填满萤幕 */
for (x=0;x<COLS;++x)
mvprintw(y,x,"@");
for(;;) {
refresh();
ch=getch();
switch(ch) {
case 'q': /* 按 'q' 键离开 */
endwin();
exit(0);
case '\t': /* 按 [TAB] 键 呼叫另一视窗 */
touchwin(win); /* wrefresh() 前需 touchwin() */
wrefresh(win);
getch(); /* 按任意键关闭视窗 */
touchwin(stdscr);
break;
default:break;
}
}
}
执行结果:
┌————————————————————————————┐
│ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ │
│ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ │
│ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ │
│ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ │
│ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ │
│ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ │
│ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ │
│ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ │
│ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ │
│ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ │
│ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ │
│ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ │
│ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ │
└————————————————————————————┘
↑ 原来画面被 '@' 填满, 按下[TAB]键後
↓ 出现 POP-UP 画面.
┌————————————————————————————┐
│ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ │
│ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ │
│ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ │
│ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ │
│ @@@@@@@@@@@@@□---------------------------+@@@@@@@@@@@ │
│ @@@@@@@@@@@@@| This is another screen |@@@@@@@@@@@ │
│ @@@@@@@@@@@@@| Press anykey to continue.. |@@@@@@@@@@@ │
│ @@@@@@@@@@@@@□---------------------------+@@@@@@@@@@@ │
│ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ │
│ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ │
│ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ │
│ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ │
│ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ │
└————————————————————————————┘