[心得] testAsc杂谈

楼主: ypf791 (路人1号)   2012-10-07 02:17:59
开始玩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] -> [识别码]
所以就这样定义常数:
//
//
作者: jackervator (jokerlin)   2012-10-07 02:49:00
推一下
作者: OckhamsRazor (魏格纳的友人)   2012-10-07 11:36:00
推原PO 我也是这三个键不一样XD
作者: vegired (翠玉白菜)   2012-10-07 22:35:00
推一下,我这三个键也是另外改的XD
作者: ric2k1 (Ric)   2012-10-07 23:30:00
很实用的心得分享,先置底一下到 HW#2 due!!
作者: XDucka (Duck)   2012-10-09 21:49:00
如果is Arrowkey那样写 不是要先确定 home 跟 uparrow虽然flag不一样 但是也要确定key值不一样 要是 pageup也是53leftarrow也是53不就G了@@ 既然这个不会重复 那当初干嘛要多设定这种27 -> 91 -> xx 的方法阿..
作者: taldehyde (阿肥)   2012-10-12 20:47:00
可以问一下1<<10的意思吗?
作者: OckhamsRazor (魏格纳的友人)   2012-10-12 21:04:00
楼上装弱...
作者: taldehyde (阿肥)   2012-10-12 21:17:00
楼上别这样...后来查到是bitwise-shifting
作者: andy13579372 (痘糖)   2012-10-13 22:48:00
感谢楼上 刚自D了一篇同样的问题文
作者: abc346289   2012-10-14 00:19:00
所以意思是说我的home是27->79->72改完之后执行testAsc按home显示"27 79 72 Home key"这样就是完成了吗?
作者: ric2k1 (Ric)   2012-10-14 13:44:00
会显示 Home Key 而且再按下一个 key 也是正常的话,应该就是 OK 囉!
作者: ss355227 (前祐)   2012-10-18 03:49:00
自己改完的经验,如果定义成MY_HOME_KEY,testAsc好像会看不懂,应该只要HOME_KEY就好了 好像是原本就定好了
作者: Phantasnix (凰响)   2012-10-18 20:36:00
参看这篇心得指点了自己的迷惑,感谢这么用心又条理明晰的心得 <(_ _)>
楼主: ypf791 (路人1号)   2012-10-19 00:55:00
姆...其实我的意思是checkChar里面 判断用MY_KEY_INT和MY_KEY_FLAG之类的 但是return的时候用已经定义过的直接回传MY_HOME_KEY的话的确会看不懂

Links booklink

Contact Us: admin [ a t ] ucptt.com