| 论坛注册| 加入收藏 | 设为首页| RSS
Google
您当前的位置:首页 > Linux频道 > Linux开发区 > 软件开发

curses 库介绍之二

时间:2006-08-07 11:10:54  来源:Linux联盟收集  作者:林建宏
在上期为您介绍完了 curses.h 函式库的一些基本函式呼叫後在, 在本期里5szLinux联盟
    , 我们将继续为您介绍 curses 有关多视窗处理的函式. 有了这些函式, 我们5szLinux联盟
    可以在程式里同时处理多个不同的视窗.  如 joe 编辑器内我们可将萤幕切割5szLinux联盟
    成好几个小萤幕, 并且可以在这些不同的萤幕间做切换并编辑不同的档案, 这5szLinux联盟
    就是多视处理的应用. 另外, 有关 POP-UP 视窗的制作, 以及视窗的卷动, 在5szLinux联盟
    本文里, 我们将以简单的例子, 告诉您这些功能是如何做到的. 关於一些较基5szLinux联盟
    本函式的用法, 我们将不再特别介绍. 如果您尚未熟悉 curses 基本函式使用5szLinux联盟
    方法, 请参阅上一期 (80 期 ) 通讯.5szLinux联盟
5szLinux联盟
5szLinux联盟
  ■ 视窗的建立5szLinux联盟
5szLinux联盟
    视窗的建立, 以 newwin() 这个函式来完成.  同时, 需宣告此视窗为 WINDOW5szLinux联盟
    结构变数.5szLinux联盟
5szLinux联盟
    WINDOW *newwin(lines,colums,start_y,start_x);5szLinux联盟
5szLinux联盟
5szLinux联盟
     WINDOW *win;5szLinux联盟
     win=newwin(10,20,0,0);5szLinux联盟
5szLinux联盟
    如此, 将以 (0,0) 为原点, 取一个 10 列 20 行的矩形为一新的视窗.  今後5szLinux联盟
    我们只要呼叫 win 这个变数, 就可以对这新视窗做处理.5szLinux联盟
5szLinux联盟
     如: wmove(win,3,2);5szLinux联盟
5szLinux联盟
5szLinux联盟
  ■ 多视窗处理函式的格式5szLinux联盟
5szLinux联盟
    这一类函式和一般的基本函式极为类似, 几乎每一个基本函式都有一个对应的5szLinux联盟
    视窗处理函式.  一般将 'w' 加在函式的里头作为区别, 'w' 乃 'window' 之5szLinux联盟
    意. 另外, 因为可同时处理多个视窗, 在呼叫使用时, 需特别指定欲处理的视5szLinux联盟
    窗. 当然, 如果您指定对 stdscr 做处理, 由於是对标准输出入萤幕处理, 其5szLinux联盟
    作用将相当於一般基本的函式.5szLinux联盟
5szLinux联盟
     如:5szLinux联盟
5szLinux联盟
      wmove(win,y,x)     即对 win 这个视窗做 move() 动作.5szLinux联盟
      wmove(stdscr,y,x)  相当於 move(y,x)5szLinux联盟
5szLinux联盟
    介绍一些较重要的函式5szLinux联盟
5szLinux联盟
    wmove(win,y,x)5szLinux联盟
    touchwin(win)5szLinux联盟
    wrefresh(win)5szLinux联盟
    mvwaddstr(win,y,x,str)5szLinux联盟
    wattron(attr)5szLinux联盟
    delwin(win)5szLinux联盟
    subwin(win,ny,nx,y,x)5szLinux联盟
5szLinux联盟
    其他函式多和基本函式互为对应, 故不全部列出, 详细名称可参考 curses5szLinux联盟
    的 online manual.5szLinux联盟
5szLinux联盟
  ■ 视窗内的座标系5szLinux联盟
5szLinux联盟
    视窗内的座标系, 将以此视窗的起始点为新原点, 并以其相对位置作为新的5szLinux联盟
    座标. 举例来说5szLinux联盟
5szLinux联盟
    win=newwin(10,20,5,5);5szLinux联盟
    wmove(win,2,3);5szLinux联盟
5szLinux联盟
    将以 (5,5) 为新原点,  y 方向移动 2 单位, x 方向移动 3 单位. 因此实际5szLinux联盟
    上, 游标将移动至 y=7 x=8 的位置上.5szLinux联盟
5szLinux联盟
5szLinux联盟
  ■ POP-UP 视窗的建立5szLinux联盟
5szLinux联盟
    利用 curses 所提供的视窗处理函式, 我们可以做出像  ONLINE HELP 的 POP5szLinux联盟
    -UP 画面. 当按下某键後, 一个新的视窗将像 " 跳 " 出来一般覆盖原来的画5szLinux联盟
    面. 当关掉此视窗後, 又不会影响到原来被覆盖的画面.5szLinux联盟
5szLinux联盟
5szLinux联盟
    下面的例子, 我们及模拟 ONLINE HELP 的形式, 当按下 'h' 键时, 视窗即出现5szLinux联盟
5szLinux联盟
5szLinux联盟
   #include <curses.h>5szLinux联盟
5szLinux联盟
   main()5szLinux联盟
    {5szLinux联盟
     int ch,x,y;5szLinux联盟
     WINDOW *win;5szLinux联盟
5szLinux联盟
     initscr();   ←┐5szLinux联盟
     cbreak;        │ 启动 curses 模式5szLinux联盟
     noecho();      │5szLinux联盟
     nonl();      ←┘5szLinux联盟
5szLinux联盟
     win=newwin(4,30,LINES/2-3, COLS/2-15);/* 建立一个新视窗, 其中LINES,COLS5szLinux联盟
*/5szLinux联盟
     box(win,'|','-');                     /* 为 curses 内定值,5szLinux联盟
即萤幕行/列数*/5szLinux联盟
     mvwaddstr(win,1,4,"This is another screen");5szLinux联盟
     mvwaddstr(win,2,2,"Press anykey to continue..");5szLinux联盟
5szLinux联盟
     for (y=0;y<LINES;++y)     /* 以'@'填满萤幕 */5szLinux联盟
      for (x=0;x<COLS;++x)5szLinux联盟
        mvprintw(y,x,"@");5szLinux联盟
5szLinux联盟
      for(;;) {5szLinux联盟
       refresh();5szLinux联盟
       ch=getch();5szLinux联盟
       switch(ch) {5szLinux联盟
         case 'q':                /* 按 'q' 键离开 */5szLinux联盟
                   endwin();5szLinux联盟
                   exit(0);5szLinux联盟
5szLinux联盟
         case '\t':              /* 按 [TAB] 键 呼叫另一视窗   */5szLinux联盟
           touchwin(win);        /* wrefresh() 前需 touchwin() */5szLinux联盟
           wrefresh(win);5szLinux联盟
           getch();              /* 按任意键关闭视窗 */5szLinux联盟
           touchwin(stdscr);5szLinux联盟
           break;5szLinux联盟
5szLinux联盟
         default:break;5szLinux联盟
        }5szLinux联盟
      }5szLinux联盟
    }5szLinux联盟
5szLinux联盟
5szLinux联盟
   执行结果:5szLinux联盟
5szLinux联盟
      ┌————————————————————————————┐5szLinux联盟
      │ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ │5szLinux联盟
      │ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ │5szLinux联盟
      │ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ │5szLinux联盟
      │ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ │5szLinux联盟
      │ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ │5szLinux联盟
      │ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ │5szLinux联盟
      │ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ │5szLinux联盟
      │ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ │5szLinux联盟
      │ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ │5szLinux联盟
      │ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ │5szLinux联盟
      │ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ │5szLinux联盟
      │ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ │5szLinux联盟
      │ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ │5szLinux联盟
      └————————————————————————————┘5szLinux联盟
                     ↑ 原来画面被 '@' 填满, 按下[TAB]键後5szLinux联盟
                     ↓ 出现 POP-UP 画面.5szLinux联盟
      ┌————————————————————————————┐5szLinux联盟
      │ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ │5szLinux联盟
      │ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@ │5szLinux联盟
      │ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ │5szLinux联盟
      │ @@@@@@@@@@@@@@@@@@@@@@@@@@ │5szLinux联盟
      │ @@@@@@@@@@@@@□---------------------------+@@@@@@@@@@@ │5szLinux联盟
      │ @@@@@@@@@@@@@|   This is another screen   |@@@@@@@@@@@ │5szLinux联盟
      │ @@@@@@@@@@@@@| Press anykey to continue.. |@@@@@@@@@@@ │5szLinux联盟
      │ @@@@@@@@@@@@@□---------------------------+@@@@@@@@@@@ │5szLinux联盟
      │ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ │5szLinux联盟
      │ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ │5szLinux联盟
      │ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ │5szLinux联盟
      │ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ │5szLinux联盟
      │ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ │5szLinux联盟
      └————————————————————————————┘5szLinux联盟
5szLinux联盟
5szLinux联盟
  ■ 视窗的卷动5szLinux联盟
5szLinux联盟
    视窗的卷动, 掖Q用来配合视窗的处理, 当我们持续对视窗输出直到视窗的游5szLinux联盟
    标移动至最後一列时, 如果我们再输出一列或是输出一个换行字元时, 视窗可5szLinux联盟
    整个往上卷动一行. 这对我们撰写一个编辑程式时, 是尤其重要的, 一个画面5szLinux联盟
    无法卷动的编辑器, 势必无法处理超过一个萤幕大小的档案.5szLinux联盟
5szLinux联盟
    视窗的卷动是预设为关闭的, 并以 scrollok() 来控制开闭.5szLinux联盟
5szLinux联盟
    scrollok(win,TRUE);    开启5szLinux联盟
    scrollok(win,FALSE);   关闭5szLinux联盟
5szLinux联盟
5szLinux联盟
    下面的例子因为不断地输出 0,1,2.. 故将以一个 40 * 10 的视窗不停的卷动5szLinux联盟
5szLinux联盟
      #include <curses.h>5szLinux联盟
5szLinux联盟
      main()5szLinux联盟
       {5szLinux联盟
         int i;5szLinux联盟
         WINDOW *scrwin,*boxwin;5szLinux联盟
5szLinux联盟
         initscr();     ←┐5szLinux联盟
         cbreak;          │ 启动 curses 模式5szLinux联盟
         noecho();        │5szLinux联盟
         nonl();        ←┘5szLinux联盟
5szLinux联盟
         scrwin=newwin(10,40,LINES/2-6,COLS/2-25); /* 设定另一视窗大小 */5szLinux联盟
         boxwin=newwin(12,42,LINES/2-7,COLS/2-26); /* 设定外框视窗大小 */5szLinux联盟
5szLinux联盟
         scrollok(scrwin,TRUE);  /* 开启视窗卷动功能 */5szLinux联盟
5szLinux联盟
         box(boxwin,'|','-');5szLinux联盟
         refresh();5szLinux联盟
         wrefresh(boxwin);5szLinux联盟
5szLinux联盟
         for (i=0;;++i)         /* 不断地在视窗内输出 0-8 的数字,使视窗卷动5szLinux联盟
*/5szLinux联盟
           {5szLinux联盟
           wprintw(scrwin,"%d",i%9);5szLinux联盟
           wrefresh(scrwin);5szLinux联盟
           }5szLinux联盟
        }5szLinux联盟
5szLinux联盟
5szLinux联盟
      执行结果:5szLinux联盟
            ┌——————————————————————┐5szLinux联盟
            │         □---------------------□          │5szLinux联盟
            │         |3456780123456780123412| ↑ 视     │5szLinux联盟
            │         |3456780123456780123456| │ 窗     │5szLinux联盟
            │         |7801234567801234567801| │ 不     │5szLinux联盟
            │         |2345678012345678012345| │ 停     │5szLinux联盟
            │         |6780123456780123456780| │ 往     │5szLinux联盟
            │         |1234567801234567801234| │ 上     │5szLinux联盟
            │         |5678012345678012345678| │ 卷     │5szLinux联盟
            │         |0123456780123456780123| │ 动     │5szLinux联盟
            │         □---------------------□          │5szLinux联盟
            │                                            │5szLinux联盟
            └——————————————————————┘5szLinux联盟
5szLinux联盟
5szLinux联盟
  ■ □例 - 模拟 joe 分割画面同时编辑两个档案5szLinux联盟
5szLinux联盟
     在下面的例子里, 我们应用了多视窗处理的函式, 改良上回介绍的编辑器,5szLinux联盟
     在这个程式里, 我们可以同时编辑两个画面, 并以 [ESC] 做不同视窗间的5szLinux联盟
     切换. 同时, 按下 [TAB] 键, 会出现 POP-UP 的 ONLINE HELP.5szLinux联盟
5szLinux联盟
5szLinux联盟
   #include <curses.h>5szLinux联盟
5szLinux联盟
   void initial();5szLinux联盟
5szLinux联盟
   main()5szLinux联盟
    {5szLinux联盟
     WINDOW *win[2],*curwin,*helpwin;5szLinux联盟
     int nowwin;5szLinux联盟
     int x,y;5szLinux联盟
     int i;5szLinux联盟
     int ch;5szLinux联盟
5szLinux联盟
     initial();5szLinux联盟
5szLinux联盟
     win[0]=newwin(LINES/2-1,COLS-1,0,0);       /* 设定两个视窗的大小*/5szLinux联盟
     win[1]=newwin(LINES/2-1,COLS-1,LINES/2,0);5szLinux联盟
5szLinux联盟
     helpwin=newwin(3,30,2,COLS/2-15 );        /* ONLINE HELP 的大小 */5szLinux联盟
     box(helpwin,'|','-');5szLinux联盟
     mvwaddstr(helpwin,0,10,"ONLINE HELP");    /* ONLINE HELP 的内容 */5szLinux联盟
     mvwaddstr(helpwin,1,4,"Hit any key to continue..");5szLinux联盟
5szLinux联盟
     for (i=0;i<COLS-1;++i)              /* 画两个视窗间的界限 */5szLinux联盟
       mvaddch(LINES/2-1,i,'-');5szLinux联盟
5szLinux联盟
     nowwin=0;                          /* 先指定游标在第一视窗 */5szLinux联盟
     curwin=win[nowwin];5szLinux联盟
     getyx(curwin,y,x);5szLinux联盟
     move(0,0);5szLinux联盟
     refresh();5szLinux联盟
5szLinux联盟
     refresh();5szLinux联盟
5szLinux联盟
     do {5szLinux联盟
       ch=getch();5szLinux联盟
       switch(ch) {5szLinux联盟
5szLinux联盟
             case KEY_UP: --y;             /* 判断是否"↑"键被按下       */5szLinux联盟
                          break;5szLinux联盟
             case KEY_DOWN: ++y;           /* 判断是否"↓"键被按下       */5szLinux联盟
                          break;5szLinux联盟
             case KEY_RIGHT: ++x;          /* 判断是否"→"键被按下       */5szLinux联盟
                          break;5szLinux联盟
             case KEY_LEFT: --x;           /* 判断是否"←"键被按下       */5szLinux联盟
                          break;5szLinux联盟
             case '\r':                    /* 判断是否 ENTER 键被按下    */5szLinux联盟
                       ++y;5szLinux联盟
                       x=0;5szLinux联盟
                       break;5szLinux联盟
             case '\t':                    /* 判断是否 TAB 键被按下      */5szLinux联盟
                       touchwin(helpwin);5szLinux联盟
                       wrefresh(helpwin); /* 呼叫 ONLINE HELP */5szLinux联盟
                       getch();5szLinux联盟
                       touchwin(win[1-nowwin]);  /* 重画第一,二视窗 */5szLinux联盟
                       wrefresh(win[1-nowwin]);5szLinux联盟
                       touchwin(curwin);5szLinux联盟
                       wrefresh(curwin);5szLinux联盟
                       break;5szLinux联盟
             case 127:                     /* 判断是否 BACKSPACE 键被按下 */5szLinux联盟
                        wmove(curwin,y,--x);/* delete 一个字元            */5szLinux联盟
                        waddch(curwin,' ');5szLinux联盟
                        break;5szLinux联盟
5szLinux联盟
            case 27 : nowwin=1-nowwin;      /* [ESC] 键切换视窗 */5szLinux联盟
                       curwin=win[nowwin];5szLinux联盟
                       getyx(curwin,y,x);5szLinux联盟
                       break;5szLinux联盟
            default:5szLinux联盟
                      waddch(curwin,ch);5szLinux联盟
                      x++;5szLinux联盟
                      break;5szLinux联盟
                 }5szLinux联盟
            wmove(curwin,y,x);5szLinux联盟
            wrefresh(curwin);5szLinux联盟
         } while(1);5szLinux联盟
     }5szLinux联盟
5szLinux联盟
5szLinux联盟
   void initial()5szLinux联盟
      {5szLinux联盟
          initscr();                  ←┐5szLinux联盟
          cbreak();                     │ 启动 curses 模式5szLinux联盟
          nonl();                       │5szLinux联盟
          noecho();                   ←┘5szLinux联盟
          intrflush(stdscr,FALSE);5szLinux联盟
          keypad(stdscr,TRUE);5szLinux联盟
          refresh();5szLinux联盟
       }5szLinux联盟
5szLinux联盟
5szLinux联盟
5szLinux联盟
    执行结果:5szLinux联盟
5szLinux联盟
           ┌—————————————————————————————┐5szLinux联盟
           │    screen1                                               │5szLinux联盟
     ┌→  │         this is screen 1, you can press [ESC] to         │5szLinux联盟
  以 │    │     switch between screen 1 and screen 2.                │5szLinux联盟
[ESC]│    │                                                          │5szLinux联盟
  切 │    │                                                          │5szLinux联盟
  换 │    │----------------------------------------------------------│5szLinux联盟
  游 │    │     screen 2                                             │5szLinux联盟
  标 │    │                                                          │5szLinux联盟
  位 └→  │        _ (游标)                                          │5szLinux联盟
  置       │                                                          │5szLinux联盟
           └—————————————————————————————┘5szLinux联盟
                                   ↑ 按下[TAB] 键,出现 ONLINE HELP5szLinux联盟
                                   ↓5szLinux联盟
           ┌—————————————————————————————┐5szLinux联盟
           │    screen1                                               │5szLinux联盟
           │         this is screen 1, you can press [ESC] to         │5szLinux联盟
           │     switch□--------ONLINE HELP--------□                │5szLinux联盟
           │           |   Hit any key to continue..|                 │5szLinux联盟
           │           □---------------------------□                │5szLinux联盟
           │----------------------------------------------------------│5szLinux联盟
           │     screen 2                                             │5szLinux联盟
           │                                                          │5szLinux联盟
           │                                                          │5szLinux联盟
           │                                                          │5szLinux联盟
           └—————————————————————————————┘5szLinux联盟
                                   ↑ 按任意键, ONLINE HELP 关闭5szLinux联盟
                                   ↓5szLinux联盟
           ┌—————————————————————————————┐5szLinux联盟
           │    screen1                                               │5szLinux联盟
           │         this is screen 1, you can press [ESC] to         │5szLinux联盟
           │     switch between screen 1 and screen 2.                │5szLinux联盟
           │                                                          │5szLinux联盟
           │                                                          │5szLinux联盟
           │----------------------------------------------------------│5szLinux联盟
           │     screen 2                                             │5szLinux联盟
           │                                                          │5szLinux联盟
           │        _ (游标)                                          │5szLinux联盟
           │                                                          │5szLinux联盟
           └—————————————————————————————┘5szLinux联盟
5szLinux联盟
5szLinux联盟
5szLinux联盟
5szLinux联盟
■ 结语5szLinux联盟
5szLinux联盟
    我们以连续两期来介绍 curses.h 函式库的使用方法, 相信同学对撰写这类的5szLinux联盟
    程式应该不再陌生. 所谓『戏法人人会变, 巧妙各有不同』. 知道了基本函式5szLinux联盟
    的呼叫方法, 能不能写出实用的程式, 就靠各位的巧思和创造力了.5szLinux联盟
5szLinux联盟
5szLinux联盟
    有任何问题建议, 欢迎 E-mail 至  ljh@CCCA.NCTU.edu.tw , 谢谢 !5szLinux联盟
5szLinux联盟
5szLinux联盟
发信人: Cardinal.bbs@mic.ee.ntu.edu.tw (Cardinal), 信区: unix5szLinux联盟
标  题: Re: 请问谁会用 curses 显示 ANSI color 字5szLinux联盟
发信站: 台大电机 Maxwell 站5szLinux联盟
5szLinux联盟
首先声明,这一封的内容应该属於 programming board,但是现在有不止一个5szLinux联盟
人问我这个问题,所以在这个版再把详细的方法说明一遍。如果有人看不懂而5szLinux联盟
仍然有兴趣的,请 mail 给我 (Cardinal.bbs@mic.ee.ntu.edu.tw) ,不要在5szLinux联盟
这边 reply,我会考虑在私下或在 programming board解决你的问题。5szLinux联盟
5szLinux联盟
==> 在 Cardinal@Maxwell (Cardinal) 的文章中提到:5szLinux联盟
:   1.开一个 new window (newwin)5szLinux联盟
:   2.设定 window 的彩色属性 (wattrset)5szLinux联盟
5szLinux联盟
==> 在设定彩色属性之前应该先设定颜色的 "pair" ,所谓的 "pair" 是指5szLinux联盟
    foreground及background的颜色。curses的颜色有下面几种 (type为5szLinux联盟
    short) :5szLinux联盟
        COLOR_BLACK, COLOR_RED, COLOR_GREEN, COLOR_YELLOW, COLOR_BLUE,5szLinux联盟
        COLOR_MAGENTA, COLOR_CYAN, COLOR_WHITE5szLinux联盟
5szLinux联盟
    用init_pair(short pair, short f_color, short b_color)来设定 pair,5szLinux联盟
    for example:5szLinux联盟
        init_pair(100, COLOR_RED, COLOR_BLUE)5szLinux联盟
    就设定了编号为 100, 蓝底红字的 color pair 了.5szLinux联盟
5szLinux联盟
    另外你要是嫌这几种颜色太单调了, 可以用 init_color 来设定色彩, 细节5szLinux联盟
    这边就不谈了.5szLinux联盟
5szLinux联盟
    然後就用 wattrset(WINDOW* pwindow, short color_pair)设定你window的5szLinux联盟
    颜色, for example:5szLinux联盟
        wattrset(pwindow, 100) 就设定了一个蓝底红字的 window (不要忘记5szLinux联盟
                               这儿的 100 是刚刚用 init_pair设定的值)5szLinux联盟
5szLinux联盟
:   3.印在 window 的字就自动变成那个颜色了 (mvwprintw, mvwaddstr, ...)5szLinux联盟
5szLinux联盟
==> 这句... 该不会有问题吧.5szLinux联盟
5szLinux联盟
:   4.想要印不同颜色的字,只要把那个字 "OR" (|) 不同的颜色即可 (记住,5szLinux联盟
:     这种有属性的字要用 int,不能用 char)5szLinux联盟
5szLinux联盟
==> 其实型别不是用 int, 而是用 chtype (不过没有差别, 去查查 curses.h就5szLinux联盟
    知道) , 譬如说, 你想要在刚刚设定为蓝底红字的 window印一个别的颜色的5szLinux联盟
    'A' 字, 可以这麽做 :5szLinux联盟
5szLinux联盟
    init_pair(another_color_pair, COLOR_随便, COLOR_随便) -->先设定另一5szLinux联盟
                                                             个 color pair5szLinux联盟
    char   cascii = 'A';5szLinux联盟
    chtype cascii_color = cascii | another_color_pair;5szLinux联盟
5szLinux联盟
    再把 cascii_color 印出来就是一个你想要颜色的 A 了.5szLinux联盟
5szLinux联盟
--5szLinux联盟
                                                        ~  Cardinal  ~5szLinux联盟
5szLinux联盟
From:      Cardinal (Cardinal)5szLinux联盟
Title:     关於精华区...5szLinux联盟
Date:      Fri Mar 10 20:36:27 19955szLinux联盟
5szLinux联盟
5szLinux联盟
您好:5szLinux联盟
5szLinux联盟
在 programming 版精华区 unix - curses libraries 中有一篇文章是我写的,5szLinux联盟
刚刚来这边找资料时翻到的, 真是受宠若惊. 不过原来的文章 (如何用 curses5szLinux联盟
显示彩色) 有一点忘了提到, 希望您能把下面的说明加进去:5szLinux联盟
5szLinux联盟
  1.  init_color及init_pair 是 SystemVR3以後的标准, 不适用於 BSD 或5szLinux联盟
      SunOS.5szLinux联盟
  2.  在 SunOS 上要达成这样的目的, 我知道的有两种解法5szLinux联盟
    a.有一款大同的中文工作站有支援 init_color & init_pair 的 library5szLinux联盟
      这一型的 library 与 SunOS 为 object-code compatible.5szLinux联盟
    b.ncurses 支援 init_pair & init_color5szLinux联盟
来顶一下
近回首页
返回首页
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
相关文章
栏目更新
栏目热门