Chinaunix首页 | 论坛 | 博客
  • 博客访问: 635490
  • 博文数量: 51
  • 博客积分: 773
  • 博客等级: 军士长
  • 技术积分: 2392
  • 用 户 组: 普通用户
  • 注册时间: 2012-05-07 21:32
文章分类
文章存档

2018年(1)

2013年(16)

2012年(34)

分类: LINUX

2012-05-08 21:05:21

介绍Curses编程中的一些基本API:
initsrc() 初始化一个窗口,返回值是一个WINDOW*指针,代表创建的窗口
endwin() 恢复原来的窗口然后退出,与initsrc对应
cbreak() 设置当前终端不等待回车键
nocbreak()等待回车键输入才读取
noecho() 设置当前终端不回显
echo()开启终端回显
move(row, col)光标移到(row,col)处
clear() 清屏,光标回到窗口最左上角(0, 0)处
getch() 输入一个字符
addch()在当前光标处输入一个字符替换原来的字符,然后光标右移
insch()在当前光标处插入一个字符,其他字符依次右移一位
delch()删除光标处的字符,右边的字符依次左移,光标位置不变
char inch() 返回光标处的字符
mvaddstr(row, col, *str)移动光标到(row,col),然后输出字符串
getyx(WINDOW*, row, col)返回当前光标的坐标
getmaxyx(WINDOW* wd, int rows, int cols) 获取窗口wd的长和宽
move(int row, int col) 将光标移到指定的坐标处
scanw()和printw(),与scanf和printf类似
wgetstr()获取字符串
attron()和attroff()开启和关闭一些属性
refresh() 将页面输出刷新


  1. #include <curses.h>

  2. int rows, cols;
  3. int r = 0, c = 0;
  4. void draw(char ch)
  5. {
  6.     if (ch == '\n')
  7.     {
  8.         r++;
  9.         c = 0;
  10.     }
  11.     else
  12.     {
  13.         delch();
  14.         insch(ch);
  15.         c++;
  16.     }    

  17.     if ( c==cols)    
  18.     {
  19.         c = 0;
  20.         r++;
  21.         if ( r==rows)
  22.             r = 0;
  23.     }
  24.     
  25.     move(r, c);
  26.     refresh();
  27. }
  28. int main()
  29. {
  30.     char ch;
  31.     WINDOW *wnd;

  32.     wnd = initscr();
  33.     
  34.     cbreak();
  35.     noecho();
  36.     
  37.     getmaxyx(wnd, rows, cols);
  38.     
  39.     clear();
  40.         
  41.     if (start_color() == OK)    
  42.     {
  43.         init_pair(1, COLOR_RED, COLOR_GREEN);
  44.         attron(COLOR_PAIR(1));
  45.         while(1)
  46.         {
  47.             ch = getch();
  48.             if (ch == 'q' || ch == 'Q')
  49.                 break;
  50.             draw(ch);
  51.         }
  52.         attroff(COLOR_PAIR(1));    
  53.         refresh();
  54.     }
  55.     else
  56.     {
  57.         waddstr(stdscr, "Terminal not support.");
  58.         refresh();
  59.     }    
  60.     
  61.     endwin();
  62.     
  63.     return 0;
  64. }


阅读(2303) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~