开始玩testAsc了
一开始就发现我的程式编译不过 上版一查
FLAG的问题 comment掉就没事了 (#1GR_Es0d (EE_DSnP))
正常编译后开始测按键 结果所有非字符键全死...
原来是因为cmdCharDef.cpp里面的处理函数只处理了单码按键
双码以上都是空的
于是先把下面助教会用的那段code毫不犹豫的抄过来
重新编译后 开始读的到特殊码了
但是!! Backspace, Home, End这三个按键没有正常显示
不幸啊...
====以下正文====
真的像我这么不幸(好吧只有三个键已经很幸福了)的话要怎么办
基本上就是"让程式看懂这串输入是啥鬼"
所以第一件事就是纪录自己的按键传出怎样的码
以我的例子 Home传出来的是27->79->72
End传出来的是27->79->70
什么? 你问我怎么知道的?
就算认不得你的按键 testAsc还是会老实的印出来啊(笑)
接下来是分析
首先我们观察助教的键盘
cmdCharDef.h Line:54开始是enum ParseChar的定义
这里面包含了所有按键会传出来的码 大致上分为
1) 所有系统都一样的单码字符(Line 56:63)
Tab啦Enter啦Esc啦大概都在这里
2) 跟系统有关的单码字符(Line 65:78)
只有一个Backspace
3) 跟系统有关的多码字符(Line 80:105)
Arrow keys & Mod keys
4) 未定义字符, 哔一声等等根本跟键盘无关的常数
我们可能需要改动的地方是2和3
我很幸运的 Backspace跟助教一样是127
所以把助教的抄过来就好了
为了让我们能适当的定义对应到自己按键的常数 我们要先了解编码规则
第三区的按键编码规则 以助教的键盘为例
Ex: ARROW_UP = 27 -> 91 -> 65
第一码是特殊按键识别 一定是Esc
第二码是特殊按键种类识别 助教的键盘在这里没有分别 Arrow和Mod都是91
像我的键盘就有分91和79的
第三码是区分特殊按键 像UP是65 DOWN是66 诸如此类
Ex: PG_UP = 27 -> 91 -> 53 -> 126
前三码的意义同上
第四码是后缀修饰 助教的Mod键全都有这个后缀
接着来分析自己的按键的编码规则
以我的为例 就是Esc -> [种类识别码79] -> [识别码]
所以就这样定义常数:
//
//