免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1746 | 回复: 0
打印 上一主题 下一主题

[Linux] NCURSOR窗口疑问? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-04-17 15:43 |只看该作者 |倒序浏览
本帖最后由 AllenYao 于 2013-04-18 09:44 编辑

正在学习NCURSOR,输入了书上的一段例程,但是实际运行效果却有差异,特来请教。

程序代码如下所示:
  1. /*
  2. * 例7:带边框的窗口
  3. */
  4. #include <ncurses.h>

  5. WINDOW *create_newwin(int height, int width, int starty, int startx);

  6. void destroy_win(WINDOW *local_win);

  7. int main(int argc, char *argv[])
  8. {
  9.         WINDOW *my_win;
  10.         int startx, starty, width, height;
  11.         int ch;

  12.         initscr(); /* 初始化并进入curses 模式*/
  13.         cbreak(); /* 行缓冲禁止,传递所有控制信息*/
  14.         keypad(stdscr, TRUE); /* 程序需要使用F1 功能键*/
  15.         height = 3;
  16.         width = 10;
  17.         starty = (LINES-height) / 2; /*计算窗口中心位置的行数*/
  18.         startx = (COLS-width) / 2; /*计算窗口中心位置的列数*/
  19.         printw("Press F1 to exit");
  20.         refresh();

  21.         my_win = create_newwin(height, width, starty, startx);
  22.         while((ch = getch()) != KEY_F(1))
  23.         {
  24.                 switch(ch)
  25.                 {
  26.                         case KEY_LEFT:
  27.                                 destroy_win(my_win);
  28.                                 my_win = create_newwin(height, width, starty,--startx);
  29.                                 break;
  30.                         case KEY_RIGHT:
  31.                                 destroy_win(my_win);
  32.                                 my_win = create_newwin(height, width, starty,++startx);
  33.                                 break;
  34.                         case KEY_UP:
  35.                                 destroy_win(my_win);
  36.                                 my_win = create_newwin(height, width, --starty,startx);
  37.                                 break;
  38.                         case KEY_DOWN:
  39.                                 destroy_win(my_win);
  40.                                 my_win = create_newwin(height, width, ++starty,startx);
  41.                                 break;
  42.                 }
  43.         }
  44.         endwin(); /*结束curses 模式*/
  45.         return 0;
  46. }

  47. WINDOW *create_newwin(int height, int width, int starty, int startx)
  48. {
  49.         WINDOW *local_win;
  50.         local_win = newwin(height, width, starty, startx);
  51.         box(local_win, 0 , 0); /* 0, 0 是字符默认的行列起始位置*/
  52.         wrefresh(local_win); /*刷新窗口缓冲,显示box */
  53.         return local_win;
  54. }

  55. void destroy_win(WINDOW *local_win)
  56. {/* box(local_win, ' ', ' ');不会按照预期的那样清除窗口边框。而是在窗口的四个角落留下残
  57. 余字符*/
  58.         wborder(local_win, ' ', ' ', ' ',' ',' ',' ',' ',' ');
  59.         /*参数注解9.3:
  60. * 1. win:当前操作的窗口
  61. * 2. ls:用于显示窗口左边界的字符
  62. * 3. rs:用于显示窗口右边界的字符
  63. * 4. ts:用于显示窗口上边界的字符
  64. * 5. bs:用于显示窗口下边界的字符
  65. * 6. tl:用于显示窗口左上角的字符
  66. * 7. tr:用于显示窗口右上角的字符
  67. * 8. bl:用于显示窗口左下角的字符
  68. * 9. br:用于显示窗口右下角的字符
  69. */
  70.         wrefresh(local_win);
  71.         delwin(local_win);
  72. }
复制代码
在Window7下使用Putty登录执行的效果是:


在VM虚拟机里直接运行的效果是:


问题:在Putty里窗口边框显示的是字母,是因为Putty没有设置好终端类型吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP