⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unix 屏幕导向程序的发展利器1.htm

📁 curses界面编程
💻 HTM
📖 第 1 页 / 共 2 页
字号:
    当使用 attron() 开启某一种特殊属性模式後, 接下来在屏幕的输出都会以    该种属性出现. 直到您呼叫 attroff() 将此模式关闭.    请注意, 当您欲 attron() 开启另一种属性时, 请记得利用 attroff()先关    闭原来的属性, 或直接以 attrset(A_NORMAL)  将所有特殊属性关闭.否则,    curses 会将两种属性做重叠处理.     □例:        attrset(A_NORMAL);            /* 先将属性设定为正常模式       */        attron(A_UNDERLINE);          /* 加底线                       */        mvaddstr(9,10,"加底线");      /* 加底线输出一串字元           */        attroff(A_UNDERLINE);         /* 关闭加底线模式, 恢复正常模式 */        attron(A_REVERSE);            /* 开启反白模式                 */        mvaddstr(10,10,"反白");       /* 输出一串反白字元             */        attroff(A_REVERSE);           /* 关闭反白模式, 恢复正常模式   */        attron(A_BLINK);              /* 开启闪烁模式                 */        mvaddstr(11,10,"闪烁");       /* 输出一串闪烁字元             */        attroff(A_BLINK);             /* 关闭闪烁模式, 恢复正常模式   */        attron(A_BOLD);               /* 开启高亮度模式               */        mvaddstr(12,10,"高亮度");     /* 输出一串高亮度字元           */        attroff(A_BOLD);              /* 关闭高亮度模式, 恢复正常模式 */  ■ 其他常用的一些函数       beep()              发出一声哔声       box(win,ch1,ch2)    自动画方框  ch1: 画方框时垂直方向所用字元                                       ch2: 画方框时水平方向所用字元                                       example: box(stdscr,'|','-');                                       将以 | 及 - 围成一个方框  ■ 应用完整□例    下面所举的例子,  即完全利用刚刚所介绍的含式来完成.这个程序可将从键    盘上读取的字元显示在屏幕上, 并且可以上下左右方向键来控制光标的位置    , 当按下 [ESC] 後, 程序即结束.    您有没有发现, 这不就是一个简单全屏幕编辑器的雏形吗?   #include &lt;curses.h&gt;                  /* 引进 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 内所使用的一些方法.</pre><hr><script language="JavaScript" type="text/javascript"><!--			// new options introduced by Bernhard Friedrich; should work in all browsers	// additional code to display date in Month Day, Year format by Robert Crooks	var lutext;	var lutime;	var ludm;	var ludd;	var ludy;	function sstr(a,b){ //extract substrings		ret=lutime.substring(a,b);		if (ret=="Jan" || ret=="01") ret="1";		if (ret=="Feb" || ret=="02") ret="2";		if (ret=="Mar" || ret=="03" || ret=="Mrz") ret="3";		if (ret=="Apr" || ret=="04") ret="4";		if (ret=="May" || ret=="05" || ret=="Mai") ret="5";		if (ret=="Jun" || ret=="06") ret="6";		if (ret=="Jul" || ret=="07") ret="7";		if (ret=="Aug" || ret=="08") ret="8";		if (ret=="Sep" || ret=="09") ret="9";		if (ret=="Oct" || ret=="Okt") ret="10";		if (ret=="Nov") ret="11";		if (ret=="Dec" || ret=="Dez") ret="12";		return ret;	}	lutime = unescape(document.lastModified);	if (lutime.length == 17) { // Netscape 3 and higher, Internet Explorer 4	ludm = sstr(0,2); 		ludd = sstr(3,5);		ludy = sstr(6,8);	}    if (lutime.length == 20) { // Netscape on MacOS	ludm = sstr(0,3); 		ludd = sstr(4,6);		ludy = sstr(16,20);	}	if (lutime.length == 25 || lutime.length == 24) { // Netscape 2	ludm = sstr(4,7);	ludd = sstr(8,10);		ludy = sstr(20,24);	}	if (lutime.length == 29) { // Opera 3	ludm = sstr(8,11); 		ludd = sstr(5,7);		ludy = sstr(12,16);	}	if (lutime.length == 23) { // Internet Explorer 3	ludm = sstr(3,6);	ludd = sstr(7,9);	ludy = sstr(19,23);	}	lutext = "";		// US date format			monthName = new Array(12)	monthName[1] = 'January'	monthName[2] = 'February'	monthName[3] = 'March'	monthName[4] = 'April'	monthName[5] = 'May'	monthName[6] = 'June'	monthName[7] = 'July'	monthName[8] = 'August'	monthName[9] = 'September'	monthName[10] = 'October'	monthName[11] = 'November'	monthName[12] = 'December'	yearNow = null	if (ludy.length==2) {	if (ludy >= 90) {	yearNow = 19	}	else {	yearNow = 20	}	}	else yearNow=""			lutext += monthName[ludm] + " " + ludd + ", " + yearNow + ludy + " ";					var luh;	var lum;	var lus;	if (lutime.length == 17) { // Netscape 3 and higher, Internet Explorer 4	luh = sstr(9,11);	lum = sstr(12,14);	lus = sstr(15,17);	}	else {	if (lutime.length == 25 || lutime.length == 24) { // Netscape 2 or IE 3 (US)	luh = sstr(11,13);	lum = sstr(14,16);	lus = sstr(17,19);		}	else {	if (lutime.length == 29) { // Opera 3	luh = sstr(17,19);	lum = sstr(20,22);	lus = sstr(23,25);		}			else { // Internet Explorer 3 (German)	luh = sstr(10,12);	lum = sstr(13,15);	lus = sstr(16,18);		}	}	}	lutext += ((luh > 12) ? luh -12 : luh);	lutext += ":" + ((lum.length < 2) ? '0' + lum : lum);	lutext += ":" + ((lus.length < 2) ? '0' + lus : lus);	lutext += (luh >= 12) ? " PM" : " AM";		document.write("<center>");	document.write("Last Modified " + lutext);	document.write("</center>");		// --></script></body></html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -