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

📄 有没有unix下curses中的菜单函数good.htm

📁 curses界面编程
💻 HTM
📖 第 1 页 / 共 5 页
字号:
<br />   void initial()&#59;<br /><br />   main()<br />   {<br />      int x=StartX&#59;                     /* 宣告 x,y 并设定其初值              */<br /><br />      int y=StartY&#59;<br />      int ch&#59;                           /* 宣告 ch 为整数,配合 getch() 使用   */<br /><br /><br />      initial()&#59;                        /* 呼叫 initial(), 启动 curses 模式,  */<br /><br />                                        /* 并完成其它设定                     */<br /><br /><br />      box(stdscr,'|','-')&#59;              /* 画方框                             */<br /><br /><br />      attron(A_REVERSE)&#59;                /* 开启反白模式                       */<br /><br />      mvaddstr(0,20,&quot;Curses Program&quot;)&#59;  /* 在 (20,0) 处输出反白字元           */<br /><br />      attroff(A_REVERSE)&#59;               /* 关闭反白模式                       */<br /><br /><br />      move(x,y)&#59;                        /* 将光标移至初始位置                 */<br /><br /><br />      do {                              /* 以无限回圈不断等待输入             */<br /><br />       ch=getch()&#59;                      /* 等待自键盘输入字元<br />       switch(ch) {                     /* 判断输入字元为何                   */<br /><br /><br />          case KEY_UP: --y&#59;             /* 判断是否&quot;↑&quot;键被按下               */<br /><br />                       break&#59;<br />          case KEY_DOWN: ++y&#59;           /* 判断是否&quot;↓&quot;键被按下               */<br /><br />                       break&#59;<br />          case KEY_RIGHT: ++x&#59;          /* 判断是否&quot;→&quot;键被按下               */<br /><br />                       break&#59;<br />          case KEY_LEFT: --x&#59;           /* 判断是否&quot;←&quot;键被按下               */<br /><br />                       break&#59;<br />          case '\r':                    /* 判断是否 ENTER 键被按下            */<br /><br />                    ++y&#59;<br />                    x=0&#59;<br />                    break&#59;<br />          case '\t':                    /* 判断是否 TAB 键被按下              */<br /><br />                    x+=7&#59;<br />                    break&#59;<br />          case 127:                     /* 判断是否 BACKSPACE 键被按下        */<br /><br />                     mvaddch(y,--x,' ')&#59;/* delete 一个字元                    */<br /><br />                     break&#59;<br /><br />          case 27: endwin()&#59;            /* 判断是否[ESC]键被按下              */<br /><br />                   exit(1)&#59;             /* 结束 curses 模式                   */<br /><br />                                        /* 结束此程序                         */<br /><br /><br />          default:<br />                   addch(ch)&#59;           /* 如果不是特殊字元, 将此字元印出     */<br /><br />                   x++&#59;<br />                   break&#59;<br />        }<br />        move(y,x)&#59;                      /* 移动光标至现在位置                 */<br /><br />      } while (1)&#59;<br />    }<br /><br />   void initial()                       /* 自定开启 curses 函数               */<br /><br />   {<br />       initscr()&#59;<br />       cbreak()&#59;<br />       nonl()&#59;<br />       noecho()&#59;<br />       intrflush(stdscr,FALSE)&#59;<br />       keypad(stdscr,TRUE)&#59;<br />       refresh()&#59;<br />    }<br /><br /><br /><br />  ■ 後记<br /><br />    学完了上述的一些命令,  相不相信您已经可以写出一个漂亮的全屏幕编辑<br />    器了? 事实上, curses 提供的函数不下  200 个, 可是笔者认为, 一切再<br />    复杂的函数都可以用本文提到的一些组合变化而成,  学了太多的函数, 只<br />    是徒增自己困扰罢了.  当然,  如果您对其它函数有兴趣,  可以自行参阅<br />    curses 说明档.  ( 方法: % man curses ) 本文不过行抛砖引玉之效, 也<br />    希望未来能陆续出现更多同学自行创作的程序.<br /><br />     * 任何疑问及建议, 欢迎 e-mail 至 <a href="mailto:ljh@CCCA.NCTU.edu.tw">ljh@CCCA.NCTU.edu.tw</a>. 谢谢 ! *<br /><br /><br /><br /> 注一:<br />     请参考 /usr/share/lib/termcup<br />            /usr/share/lib/terminfo/s/sun<br /><br /> 注二:<br />     1.如果是 BSD 的版本, 需使用<br />       cc [file.c] -lcurses -ltermcap 来完成 compile.<br />     2.计中工作站不知何故将原来的 /usr/5bin/cc 更改为 /usr/5bin/cc.org<br />       因此, 您若想在计中工作站 compile curses 程序.需以 /usr/5bin/cc.org<br />       取代 /usr/5bin/cc , 否则 compile 可能发生错误.<br />     3.较旧版的 curses 需同时引进 curses 和 termlib 这两个 library,<br />       因此, 您必须使用 /usr/5bin/cc [file.c] -lcurses -ltermlib 来 compile.<br /><br /> 注三:<br />      根据笔者的经验, 上下左右方向键应可正常使用而不会发生问题, 但其它<br />      如 PgUp,PgDn,功能键,Home,End 等特殊键, 很容易因机器, 键盘不同而无<br />      法使用, 因此, 若您的程序须要在不同的机器上使用, 建议您只用方向键来<br />      控制, 其它的特殊键少用为妙.<br />      至於 PgUp,PgDn 一些特殊键的控制方法, 由於较为复杂, 有兴趣的同学可参<br />      考 tin 原始程序 curses.c 内所使用的一些方法.<br /><br /><br /><br /><br />--------------------------------------------------------------------------------<br /><br /> <br /> <br /><br /><br />UNIX 屏幕导向程序的发展利器 - curses (之二) <br /><br />作者:林建宏<br /><br />     在上期为您介绍完了 curses.h 函式库的一些基本函式呼叫後在, 在本期里<br />    , 我们将继续为您介绍 curses 有关多视窗处理的函式. 有了这些函式, 我们<br />    可以在程式里同时处理多个不同的视窗.  如 joe 编辑器内我们可将萤幕切割<br />    成好几个小萤幕, 并且可以在这些不同的萤幕间做切换并编辑不同的档案, 这<br />    就是多视处理的应用. 另外, 有关 POP-UP 视窗的制作, 以及视窗的卷动, 在<br />    本文里, 我们将以简单的例子, 告诉您这些功能是如何做到的. 关於一些较基<br />    本函式的用法, 我们将不再特别介绍. 如果您尚未熟悉 curses 基本函式使用<br />    方法, 请参阅上一期 (80 期 ) 通讯.<br /><br /><br />  ■ 视窗的建立<br /><br />    视窗的建立, 以 newwin() 这个函式来完成.  同时, 需宣告此视窗为 WINDOW<br />    结构变数.<br /><br />    WINDOW *newwin(lines,colums,start_y,start_x)&#59;<br /><br /><br />     WINDOW *win&#59;<br />     win=newwin(10,20,0,0)&#59;<br /><br />    如此, 将以 (0,0) 为原点, 取一个 10 列 20 行的矩形为一新的视窗.  今後<br />    我们只要呼叫 win 这个变数, 就可以对这新视窗做处理.<br /><br />     如: wmove(win,3,2)&#59;<br /><br /><br />  ■ 多视窗处理函式的格式<br /><br />    这一类函式和一般的基本函式极为类似, 几乎每一个基本函式都有一个对应的<br />    视窗处理函式.  一般将 'w' 加在函式的里头作为区别, 'w' 乃 'window' 之<br />    意. 另外, 因为可同时处理多个视窗, 在呼叫使用时, 需特别指定欲处理的视<br />    窗. 当然, 如果您指定对 stdscr 做处理, 由於是对标准输出入萤幕处理, 其<br />    作用将相当於一般基本的函式.<br /><br />     如:<br /><br />      wmove(win,y,x)     即对 win 这个视窗做 move() 动作.<br />      wmove(stdscr,y,x)  相当於 move(y,x)<br /><br />    介绍一些较重要的函式<br /><br />    wmove(win,y,x)<br />    touchwin(win)<br />    wrefresh(win)<br />    mvwaddstr(win,y,x,str)<br />    wattron(attr)<br />    delwin(win)<br />    subwin(win,ny,nx,y,x)<br /><br />    其他函式多和基本函式互为对应, 故不全部列出, 详细名称可参考 curses<br />    的 online manual.<br /><br />  ■ 视窗内的座标系<br /><br />    视窗内的座标系, 将以此视窗的起始点为新原点, 并以其相对位置作为新的<br />    座标. 举例来说<br /><br />    win=newwin(10,20,5,5)&#59;<br />    wmove(win,2,3)&#59;<br /><br />    将以 (5,5) 为新原点,  y 方向移动 2 单位, x 方向移动 3 单位. 因此实际<br />    上, 游标将移动至 y=7 x=8 的位置上.<br /><br /><br />  ■ POP-UP 视窗的建立<br />

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -