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

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

📁 curses界面编程
💻 HTM
📖 第 1 页 / 共 2 页
字号:
                       break;             case '\t':                    /* 判断是否 TAB 键被按下      */                       touchwin(helpwin);                       wrefresh(helpwin); /* 呼叫 ONLINE HELP */                       getch();                       touchwin(win[1-nowwin]);  /* 重画第一,二视窗 */                       wrefresh(win[1-nowwin]);                       touchwin(curwin);                       wrefresh(curwin);                       break;             case 127:                     /* 判断是否 BACKSPACE 键被按下 */                        wmove(curwin,y,--x);/* delete 一个字元            */                        waddch(curwin,' ');                        break;            case 27 : nowwin=1-nowwin;      /* [ESC] 键切换视窗 */                       curwin=win[nowwin];                       getyx(curwin,y,x);                       break;            default:                      waddch(curwin,ch);                      x++;                      break;                 }            wmove(curwin,y,x);            wrefresh(curwin);         } while(1);     }   void initial()      {          initscr();                  ←┐          cbreak();                     │ 启动 curses 模式          nonl();                       │          noecho();                   ←┘          intrflush(stdscr,FALSE);          keypad(stdscr,TRUE);          refresh();       }    执行结果:           ┌—————————————————————————————┐           │    screen1                                               │     ┌→  │         this is screen 1, you can press [ESC] to         │  以 │    │     switch between screen 1 and screen 2.                │[ESC]│    │                                                          │  切 │    │                                                          │  换 │    │----------------------------------------------------------│  游 │    │     screen 2                                             │  标 │    │                                                          │  位 └→  │        _ (游标)                                          │  置       │                                                          │           └—————————————————————————————┘                                   ↑ 按下[TAB] 键,出现 ONLINE HELP           ┌—————————————————————————————┐           │    screen1                                               │           │         this is screen 1, you can press [ESC] to         │           │     switch□--------ONLINE HELP--------□                │           │           |   Hit any key to continue..|                 │           │           □---------------------------□                │           │----------------------------------------------------------│           │     screen 2                                             │           │                                                          │           │                                                          │           │                                                          │           └—————————————————————————————┘                                   ↑ 按任意键, ONLINE HELP 关闭           ┌—————————————————————————————┐           │    screen1                                               │           │         this is screen 1, you can press [ESC] to         │           │     switch between screen 1 and screen 2.                │           │                                                          │           │                                                          │           │----------------------------------------------------------│           │     screen 2                                             │           │                                                          │           │        _ (游标)                                          │           │                                                          │           └—————————————————————————————┘ ■ 结语    我们以连续两期来介绍 curses.h 函式库的使用方法, 相信同学对撰写这类的    程式应该不再陌生. 所谓『戏法人人会变, 巧妙各有不同』. 知道了基本函式    的呼叫方法, 能不能写出实用的程式, 就靠各位的巧思和创造力了.    有任何问题建议, 欢迎 E-mail 至  ljh@CCCA.NCTU.edu.tw , 谢谢 !发信人: Cardinal.bbs@mic.ee.ntu.edu.tw (Cardinal), 信区: unix标  题: Re: 请问谁会用 curses 显示 ANSI color 字发信站: 台大电机 Maxwell 站首先声明,这一封的内容应该属於 programming board,但是现在有不止一个人问我这个问题,所以在这个版再把详细的方法说明一遍。如果有人看不懂而仍然有兴趣的,请 mail 给我 (Cardinal.bbs@mic.ee.ntu.edu.tw) ,不要在这边 reply,我会考虑在私下或在 programming board解决你的问题。==&gt; 在 Cardinal@Maxwell (Cardinal) 的文章中提到::   1.开一个 new window (newwin):   2.设定 window 的彩色属性 (wattrset)==&gt; 在设定彩色属性之前应该先设定颜色的 "pair" ,所谓的 "pair" 是指    foreground及background的颜色。curses的颜色有下面几种 (type为    short) :        COLOR_BLACK, COLOR_RED, COLOR_GREEN, COLOR_YELLOW, COLOR_BLUE,        COLOR_MAGENTA, COLOR_CYAN, COLOR_WHITE    用init_pair(short pair, short f_color, short b_color)来设定 pair,    for example:        init_pair(100, COLOR_RED, COLOR_BLUE)    就设定了编号为 100, 蓝底红字的 color pair 了.    另外你要是嫌这几种颜色太单调了, 可以用 init_color 来设定色彩, 细节    这边就不谈了.    然後就用 wattrset(WINDOW* pwindow, short color_pair)设定你window的    颜色, for example:        wattrset(pwindow, 100) 就设定了一个蓝底红字的 window (不要忘记                               这儿的 100 是刚刚用 init_pair设定的值):   3.印在 window 的字就自动变成那个颜色了 (mvwprintw, mvwaddstr, ...)==&gt; 这句... 该不会有问题吧.:   4.想要印不同颜色的字,只要把那个字 "OR" (|) 不同的颜色即可 (记住,:     这种有属性的字要用 int,不能用 char)==&gt; 其实型别不是用 int, 而是用 chtype (不过没有差别, 去查查 curses.h就    知道) , 譬如说, 你想要在刚刚设定为蓝底红字的 window印一个别的颜色的    'A' 字, 可以这麽做 :    init_pair(another_color_pair, COLOR_随便, COLOR_随便) --&gt;先设定另一                                                             个 color pair    char   cascii = 'A';    chtype cascii_color = cascii | another_color_pair;    再把 cascii_color 印出来就是一个你想要颜色的 A 了.--                                                        ~  Cardinal  ~From:      Cardinal (Cardinal)Title:     关於精华区...Date:      Fri Mar 10 20:36:27 1995您好:在 programming 版精华区 unix - curses libraries 中有一篇文章是我写的,刚刚来这边找资料时翻到的, 真是受宠若惊. 不过原来的文章 (如何用 curses显示彩色) 有一点忘了提到, 希望您能把下面的说明加进去:  1.  init_color及init_pair 是 SystemVR3以後的标准, 不适用於 BSD 或      SunOS.  2.  在 SunOS 上要达成这样的目的, 我知道的有两种解法    a.有一款大同的中文工作站有支援 init_color & init_pair 的 library      这一型的 library 与 SunOS 为 object-code compatible.    b.ncurses 支援 init_pair & init_color</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 + -