• Copyright(C) NCURSES Programming HOWTO

键盘管理

基础知识

每一个GUI(图形用户界面)都有强大的用户交互界面。一个curses 程序应该对用户的输入(仅通过键盘和鼠标)及时的做出反应。那就让我们从处理键盘开始。就像前面章节中的例子那样,很容易就能取得用户的输入。一个最简单的方法是使用getch()函数。如果你喜欢处理单个按键,而不是处理一行的话(经常以回车键作为一行结束标志),你应该在读取按键之前激活cbreak模式。如果要读取功能键则应该激活keypad。这两个函数的用法详见初始化一章。 getch()返回一个整数来对应键盘上的按键。如果你输入的是一个普通字符,这个整数就等价于该字符。如果是其它字符,它就返回一个在curses.h 中已定义的常量相匹配的值。例如用户按下了F1,返回的整数将是265,该值可以通过curses.h 中内定义的宏KEY_F()检测。这样可以更方便的管理键盘的输入。

例如,如果你这样调用getch()函数:

int ch;
ch = getch();

getch() 函数将等待用户输入(除非你规定了延时时间)。当你按下一个键,就会返回相应的整数,之后你可以检测这个值是否是你要按的键。当然,这些相对应的值可以在curses.h中找到。 以下这段代码就可以用来监测键盘左方向键:

if(ch == KEY_LEFT)
printw("Left arrow is pressed\n");

让我们写一个可以通过上下键操纵的窗口菜单。

一个简单的使用键盘的例子

例: 一个读取键盘的例子

/*
Compile: gcc main.c -lncurses
*/
#include <stdio.h>
#include <ncurses.h>
#define WIDTH 30
#define HEIGHT 10int startx = 0;
int starty = 0;char *choices[] = {"Choice 1","Choice 2","Choice 3","Choice 4","Exit",};int n_choices = sizeof(choices) / sizeof(char *);
void print_menu(WINDOW *menu_win, int highlight);
int main()
{ WINDOW *menu_win;int highlight = 1;int choice = 0;int c;initscr();clear();noecho();cbreak(); /*禁用行缓冲,直接传递所有输入*/startx = (80-WIDTH)/ 2;starty = (24-HEIGHT)/ 2;menu_win = newwin(HEIGHT, WIDTH, starty, startx);keypad(menu_win,TRUE);mvprintw(0, 0,"Use arrow keys to go up and down, Press enter to select a choice");refresh();print_menu(menu_win,highlight);while(1){ c = wgetch(menu_win);switch(c){ case KEY_UP:if(highlight == 1)highlight = n_choices;else--highlight;break;case KEY_DOWN:if(highlight == n_choices)highlight = 1;else++highlight;break;case 10:choice = highlight;break;default:mvprintw(24, 0, "Charcter pressed is = %3d \
                                 Hopefully it can be printed as '%c'", c, c);refresh();break;}print_menu(menu_win,highlight);if(choice != 0) /*用户必须要做一个选择*/break;}mvprintw(23, 0, "You chose choice %d with choice string %s\n", choice,choices[choice-1]);clrtoeol();refresh();endwin();return 0;
}void print_menu(WINDOW *menu_win, int highlight)
{int x, y, i;x = 2;y = 2;box(menu_win, 0, 0);for(i = 0; i < n_choices; ++i){if(highlight == i + 1)  /* 使选择的字符串高亮显示*/{wattron(menu_win,A_REVERSE);mvwprintw(menu_win, y, x, "%s", choices[i]);wattroff(menu_win,A_REVERSE);}elsemvwprintw(menu_win, y, x, "%s", choices[i]);++y;}wrefresh(menu_win);
}
/**
结果:
                         ┌────────────────────────────┐
                         │                            │
                         │ Choice 1                   │
                         │ Choice 2                   │
                         │ Choice 3                   │
                         │ Choice 4                   │
                         │ Exit                       │
                         │                            │
                         │                            │
                         └────────────────────────────┘
*/

ncurses键盘管理:cbreak,keypad,getch(),KEY_F(),clrtoeol()相关推荐

  1. [RN] React Native 键盘管理 在Android TextInput遮盖,上移等问题解决办法

    [RN] React Native 键盘管理 在Android TextInput遮盖,上移等问题解决办法 参考文章: (1)[RN] React Native 键盘管理 在Android TextI ...

  2. 计算机的五大功能模,计算机操作系统通常具有的五大功能是()。A.CPU管理、显示器管理、键盘管理、打印机管理和鼠标器管...

    计算机操作系统通常具有的五大功能是().A.CPU管理.显示器管理.键盘管理.打印机管理和鼠标器管 更多相关问题 18. Photoshop中渐变工具不能在下面哪一种颜色模式下的图像中使用. 2. R ...

  3. 【Android笔记50】Android应用如何获取系统服务(软键盘管理器、闹钟管理器)

    这篇文章,主要介绍Android应用如何获取系统服务(软键盘管理器.闹钟管理器). 目录 一.获取系统服务 1.1.软键盘显示和隐藏 (1)showSoftInput显示软键盘

  4. IQKeyboardManager 键盘管理工具(个性化设置)

    文章目录 前言 I .个性化设置 1.1控制键盘上的工具条文字颜色是否用户自定义 1.1.1 修改IQKeyBoardManager的右边的Done按钮 1.1.2 修改IQKeyBoardManag ...

  5. android 软键盘工具类,Android软键盘管理工具类

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 一个软键盘管理类,单例模式实现的. /** * 类功能描述:软键盘管理界面 * */ public class Inpu ...

  6. android键盘管理,用鼠标键盘控制你的Android手机完整图文教程

    32路伺服电机控制器V3.0 官方安装版 类型:编程辅助大小:15.0M语言:中文 评分:7.5 标签: 立即下载 网上大都是91助手for android来连接手机和电脑,我自己比较偏向于豌豆荚,都 ...

  7. C语言图书管理借阅系统——ncurses库的使用

    一.前言 作为一只大四狗,最近还跟着大二同学修了一门课(当然不是之前没通过啦),课程是高级语言课程设计,高级语言指的是C语言 :),内容是做一个XX管理系统,我选择了图书管理系统,先介绍下我做的系统: ...

  8. 微软 Powertoys 推出新的实用程序,自定义键盘快捷管理

    微软 Powertoys 团队宣布推出一款新的实用程序,名为 "Keyboard Shortcut Manager"(键盘快捷键管理器).该键盘管理器使用户能够自定义其键盘,重新映 ...

  9. Android 键盘输入管理

    键盘输入管理 支持显示隐藏.自动切换.检查是否打开 InputMethod import android.content.Context; import android.view.View; impo ...

最新文章

  1. ASP.NET 网站预编译概述
  2. VMware 收购 Kubernetes 初创公司 Heptio
  3. Cisco与Linux的NAT
  4. GNOME启动时激活NumLock
  5. 《Java从小白到大牛》之第9章 字符串
  6. 如何做一个合格的面试官?
  7. C++矩阵库 Eigen 快速入门
  8. 使用XStream进行对象和xml的转换,极度舒适
  9. Jenkins 2.x版本的节点配置选项更新
  10. element ui 选项卡切换_Vue.js + element-ui 扫盲(服务端对大前端的扫盲)
  11. 如何选择适合你的兴趣爱好(十七),吉他
  12. Android MediaRecorder录制视频
  13. 飞秋FeiQ2013特色功能列表
  14. webRTC中语音降噪模块ANS细节详解(三)
  15. 是怎么样的SQL优化能做到 900W+数据,从17s到300ms?
  16. 【金融量化】期货中的对手价、市价、排队价、最新价分别表示什么价位
  17. 《缠中说禅108课》51:短线股评荐股者的传销把戏
  18. 2020~2022年软件测试的五大趋势
  19. 射灯安装方法图解_led射灯怎么安装 安装LED射灯的8个步骤
  20. 中小学分班智能系统 v2.0 怎么用

热门文章

  1. JVM学习-直接内存
  2. Spring框架----Spring的bean的生命周期
  3. JAVA程序错误总结
  4. [JAVA基础]你知道Java的四种引用类型吗
  5. 每日一题20180401-Linux
  6. linux内存占用查看
  7. java dev guide
  8. H5 自定义数据属性
  9. java 建立ssh隧道_如何使用IntelliJ和JDBC SSH隧道并连接到数据库?
  10. html单选框换行,html – 如何防止单选按钮及其标签之间的换行符,同时仍然允许标签本身中的换行符?...