📄 有没有unix下curses中的菜单函数good.htm
字号:
<br /> 控制字元外一切输入的字元将立刻被一一读取.当处於 nocbreak 模<br /> 式时, 从键盘输入的字元将被储存在 buffer 里直到输入 RETURN<br /> 或 NEWLINE.在较旧版的 curses 须呼叫 crmode(),nocrmode() 来<br /> 取代 cbreak(),nocbreak()<br /><br /><br /> □ nl()<br /> nonl()<br /><br /> 用来决定当输入资料时, 按下 RETURN 键是否被对应为 NEWLINE 字<br /> 元 ( 如 \n ).<br /> 而输出资料时, NEWLINE 字元是否被对应为 RETURN 和 LINDFEED<br /> 系统预设是开启的.<br /><br /><br /><br /> □ echo()<br /> noecho()<br /><br /> 此函数用来控制从键盘输入字元时是否将字元显示在终端上.系统<br /> 预设是开启的.<br /><br /><br /> □ intrflush(win,bf)<br /><br /> 呼叫 intrflush 时须传入两个值:<br /> win 为一 WINDOW 型态指标, 通常传入标准输出入屏幕 stdscr<br /> bf 为 TRUE 或 FALSE<br /><br /> 当 bf 为 true 时, 当输入中断字元 ( 如 break) 时, 中断的反应<br /> 将较为快速.但可能会造成屏幕的错乱.<br /><br /><br /><br /> □ keypad(win,bf)<br /><br /> 呼叫 keypad 时须传入两个值:<br /> win 为一 WINDOW 型态指标, 通常传入标准输出入屏幕 stdscr<br /> bf 为 TRUE 或 FALSE<br /><br /> 当开启 keypad 後, 可以使用键盘上的一些特殊字元, 如上下左右<br /> 等方向键, curses 会将这些特殊字元转换成 curses.h 内定义的一<br /> 些特殊键. 这些定义的特殊键通常以 KEY_ 开头.<br /><br /><br /><br /> □ refresh()<br /><br /> refresh() 为 curses 最常呼叫的一个函数.<br /><br /> curses 为了使屏幕输出入达最佳化, 当您呼叫屏幕输出函数企图改<br /> 变屏幕上的画面时, curses 并不会立刻对屏幕做改变, 而是等到<br /> refresh() 呼叫後, 才将刚才所做的变动一次完成. 其馀的资料将<br /> 维持不变. 以尽可能送最少的字元至屏幕上. 减少屏幕重绘的时间.<br /> 如果是 initscr() 後第一次呼叫 refresh(), curses 将做清除萤<br /> 幕的工作.<br /><br /><br /><br /><br /> ■ 光标的控制<br /><br /> move(y,x) 将光标移动至 x,y 的位置<br /> getyx(win,y,x) 得到目前光标的位置<br /> (请注意! 是 y,x 而不是 &y,&x )<br /><br /><br /> ■ 有关清除屏幕的函数<br /><br /> clear()<br /> erase() 将整个屏幕清除<br /> (请注意配合refresh() 使用)<br /><br /><br /> ■ 如何在屏幕上显示字元<br /><br /> echochar(ch) 显示某个字元<br /><br /> addch(ch) 显示某个字元<br /> mvaddch(y,x,ch) 在(x,y) 上显示某个字元<br /> 相当於呼叫 move(y,x);addch(ch);<br /><br /> addstr(str) 显示一串字串<br /> mvaddstr(y,x,str) 在(x,y) 上显示一串字串<br /> 相当於呼叫 move(y,x);addstr(str);<br /><br /> printw(format,str) 类似 printf() , 以一定的格式输出至屏幕<br /> mvprintw(y,x,format,str) 在(x,y) 位置上做 printw 的工作.<br /> 相当於呼叫 move(y,x);printw(format,str);<br /><br /><br /> ■ 如何从键盘上读取字元<br /><br /> getch() 从键盘读取一个字元 (注意! 传回的是整数值)<br /> getstr() 从键盘读取一串字元<br /> scanw(format,&arg1,&arg2...) 如同 scanf, 从键盘读取一串字元<br /><br /> □例:<br /><br /> int ch;<br /> char string1[80]; /* 请注意! 不可宣告为 char *string1; */<br /> char string2[80];<br /><br /> echo(); /* 开启 echo 模式, 使输入立刻显示在屏幕上 */<br /> ch=getch();<br /> string1=getstr();<br /> scanw("%s",string2);<br /> mvprintw(10,10,"String1=%s",string1);<br /> mvprintw(11,10,"String2=%s",string2);<br /><br /> ■ 如何利用方向键<br /><br /> curses 将一些如方向键等特殊控制字元, 以 KEY_ 为开头定义在 curses.h<br /> 这个档案里头, 如 KEY_UP 即代表方向键的 " ↑ ". 但, 如果您想使用<br /> curses.h 所为您定义的这些特殊键的话, 您就必须将 keypad 设定为<br /> TRUE. 否则, 您就必须自己为所有的特殊键定义了.<br /><br /> curses.h 为一些特殊键的定义如下:<br /><br /> KEY_UP 0403 ↑<br /> KEY_DOWN 0402 ↓<br /> KEY_LEFT 0404 ←<br /> KEY_RIGHT 0405 →<br /> KEY_HOME 0406 Home key (upward+left arrow)<br /> KEY_BACKSPACE 0407 backspace (unreliable)<br /> KEY_F0 0410 Function keys.<br /> KEY_F(n) (KEY_F0+(n)) Formula for f .<br /> KEY_NPAGE 0522 Next page<br /> KEY_PPAGE 0523 Previous page<br /><br /> 以上仅列出笔者较常使用的一些控制键, 至於其他控制键的定义, 请自行参<br /> 阅 man curses (* 注三)<br /><br /> 一并为您列出其他常用的一些特殊字元<br /><br /> [TAB] /t<br /> [ENTER] /r<br /> [ESC] 27<br /> [BACKSPACE] 127<br /><br /><br /> ■ 如何改变屏幕显示字元的属性<br /><br /> 为了使输出的屏幕画面更为生动美丽, 我们常须要在屏幕上做一些如反白,<br /> 闪烁等变化. curses 定义了一些特殊的属性, 透过这些定义, 我们也可以<br /> 在 curses 程序□控制屏幕的输出变化.<br /><br /> attron(mod) 开启属性<br /> attroff(mod) 关闭属性<br /><br /> curses.h 里头定义了一些属性, 如:<br /><br /> A_UNDERLINE 加底线<br /> A_REVERSE 反白<br /> A_BLINK 闪烁<br /> A_BOLD 高亮度<br /> A_NORMAL 标准模式 (只能配合 attrset() 使用)<br /><br /><br /> 当使用 attron() 开启某一种特殊属性模式後, 接下来在屏幕的输出都会以<br /> 该种属性出现. 直到您呼叫 attroff() 将此模式关闭.<br /><br /> 请注意, 当您欲 attron() 开启另一种属性时, 请记得利用 attroff()先关<br /> 闭原来的属性, 或直接以 attrset(A_NORMAL) 将所有特殊属性关闭.否则,<br /> curses 会将两种属性做重叠处理.<br /><br /> □例:<br /><br /> attrset(A_NORMAL); /* 先将属性设定为正常模式 */<br /> attron(A_UNDERLINE); /* 加底线 */<br /> mvaddstr(9,10,"加底线"); /* 加底线输出一串字元 */<br /> attroff(A_UNDERLINE); /* 关闭加底线模式, 恢复正常模式 */<br /> attron(A_REVERSE); /* 开启反白模式 */<br /> mvaddstr(10,10,"反白"); /* 输出一串反白字元 */<br /> attroff(A_REVERSE); /* 关闭反白模式, 恢复正常模式 */<br /> attron(A_BLINK); /* 开启闪烁模式 */<br /> mvaddstr(11,10,"闪烁"); /* 输出一串闪烁字元 */<br /> attroff(A_BLINK); /* 关闭闪烁模式, 恢复正常模式 */<br /> attron(A_BOLD); /* 开启高亮度模式 */<br /> mvaddstr(12,10,"高亮度"); /* 输出一串高亮度字元 */<br /> attroff(A_BOLD); /* 关闭高亮度模式, 恢复正常模式 */<br /><br /><br /> ■ 其他常用的一些函数<br /><br /> beep() 发出一声哔声<br /> box(win,ch1,ch2) 自动画方框 ch1: 画方框时垂直方向所用字元<br /> ch2: 画方框时水平方向所用字元<br /><br /> example: box(stdscr,'|','-');<br /> 将以 | 及 - 围成一个方框<br /><br /> ■ 应用完整□例<br /><br /> 下面所举的例子, 即完全利用刚刚所介绍的含式来完成.这个程序可将从键<br /> 盘上读取的字元显示在屏幕上, 并且可以上下左右方向键来控制光标的位置<br /> , 当按下 [ESC] 後, 程序即结束.<br /><br /> 您有没有发现, 这不就是一个简单全屏幕编辑器的雏形吗?<br /><br /><br /> #include <curses.h> /* 引进 curses.h , 并自动引进 stdio.h */<br /><br /><br /> #define StartX 1 /* 决定光标初始位置 */<br /> #define StartY 1<br />
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -