当前位置:早雪网网络学院编程文档C/C++ → UNIX下c语言的图形编程--curses.h 函式库

UNIX下c语言的图形编程--curses.h 函式库

减小字体 增大字体 作者:不详  来源:supcode.com收集整理  发布时间:2005-7-22 19:39:36
            (请注意配合refresh() 使用)


■ 如何在萤幕上显示字元

    echochar(ch)              显示某个字元

    addch(ch)                 显示某个字元
    mvaddch(y,x,ch)           在(x,y) 上显示某个字元
                              相当於呼叫 move(y,x);addch(ch);

    addstr(str)               显示一串字串
    mvaddstr(y,x,str)         在(x,y) 上显示一串字串
                              相当於呼叫 move(y,x);addstr(str);

    printw(format,str)        类似 printf() , 以一定的格式输出至萤幕
    mvprintw(y,x,format,str)  在(x,y) 位置上做 printw 的工作.
                              相当於呼叫 move(y,x);printw(format,str);



■ 如何从键盘上读取字元

     getch()                        从键盘读取一个字元 (注意! 传回的是
整数值)
     getstr()                       从键盘读取一串字元
     scanw(format,&arg1,&arg2...)   如同 scanf, 从键盘读取一串字元

     □例:

     int ch;
     char string1[80];   /* 请注意! 不可宣告为 char *string1; */
     char string2[80];

     echo();            /* 开启 echo 模式, 使输入立刻显示在萤幕上 */
     ch=getch();
     string1=getstr();
     scanw("%s",string2);
     mvprintw(10,10,"String1=%s",string1);
     mvprintw(11,10,"String2=%s",string2);

■ 如何利用方向键

   curses 将一些如方向键等特殊控制字元, 以 KEY_ 为开头定义在 curses.h

   这个档案里头, 如 KEY_UP  即代表方向键的  " ↑ ".  但, 如果您想使用

   curses.h  所为您定义的这些特殊键的话,  您就必须将   keypad  设定为

   TRUE. 否则, 您就必须自己为所有的特殊键定义了.

  curses.h 为一些特殊键的定义如下:

    KEY_UP          0403           ↑
    KEY_DOWN        0402           ↓
    KEY_LEFT        0404           ←
    KEY_RIGHT       0405           →
    KEY_HOME        0406           Home key (upward+left arrow)
    KEY_BACKSPACE   0407           backspace (unreliable)
    KEY_F0          0410           Function keys.
    KEY_F(n)        (KEY_F0+(n))   formula for f .
    KEY_NPAGE       0522           Next page
    KEY_PPAGE       0523           Previous page

   以上仅列出笔者较常使用的一些控制键, 至於其他控制键的定义, 请自行参

   阅 man curses (* 注三)

   一并为您列出其他常用的一些特殊字元

    [TAB]                 /t
    [ENTER]               /r
    [ESC]                 27
    [BACKSPACE]           127


 ■ 如何改变萤幕显示字元的属性

   为了使输出的萤幕画面更为生动美丽,  我们常须要在萤幕上做一些如反白,

   闪烁等变化.  curses 定义了一些特殊的属性, 透过这些定义, 我们也可以

   在 curses 程式□控制萤幕的输出变化.

    attron(mod)    开启属性
    attroff(mod)   关闭属性

   curses.h 里头定义了一些属性, 如:

    A_UNDERLINE    加底线
    A_REVERSE      反白
    A_BLINK        闪烁
    A_BOLD         高亮度
    A_NORMAL       标准模式 (只能配合 attrset() 使用)


   当使用 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 <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':                    /* 判断是否 ENTE

上一页  [1] [2] [3]  下一页

[数据载入中...] [返回上一页] [打 印]