EE_DSnP 板


LINE

开始玩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] -> [识别码] 所以就这样定义常数: // // --HOME_END keys: 27 -> 79 -> {72,70} // MY_KEY_FLAG = 1 << 10, MY_KEY_INT = 79, MY_HOME_KEY = 72 + MY_KEY_FLAG, MY_END_KEY = 70 + MY_KEY_FLAG, 注意到因为我的按键是不连续的(天知道为什麽) 所以我定义_BEGIN和_END毫无用处 然後因为ARROW用掉了1<<8 MOD用掉了1<<9 所以我的_FLAG是1<<10 这里说明一下_BEGIN, _END & _FLAG 这些其实是设计者的巧思: i) 因为这些特殊码的第三码是连续的 所以如果把头尾记录下来 到时候想要判断这些码的时候就只要看范围就好 这是_BEGIN和_END ii) 如果我们今天拿到一个代表某按键的常数 我们想知道它是哪种按键 我们自然也可以去看范围 但是有_FLAG就会更方便 例如我们可以写这样: bool isArrowKey(ParseChar ch){ return ch & ARROW_KEY_FLAG; } 这样就可以把两个逻辑运算变成一个位元运算了 注意到当成FLAG的bit在char的范围外 所以可以用char(ARROW_UP_KEY)这种方式把FLAG遮起来 这就是为什麽会有 PG_UP_KEY = 53 + MOD_KEY_FLAG 这种写法 常数定义完之後就要处理 处理的函数是ParseChar checkChar(char,istream&) @ cmdCharDef.cpp, Line 73:109 基本上当然是在那个switch里作文章 处理的逻辑是如果读到ESC就去抓下一个码 根据这码所代表的特殊键种类进行不同的处理 只要记得回传的时候 是传原本定义好的常数而不是自己定义的那个 (因为我们只动这两个地方 其他部份的程式都不知道我们有偷改这里 所以他们根本不认得我们定义的常数) (不过如果是原本没定义过的常数 也是可以硬传回去 只是接收端的处理可能要改写) --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 111.248.9.32
1F:推 jackervator:推一下 10/07 02:49
2F:推 OckhamsRazor:推原PO 我也是这三个键不一样XD 10/07 11:36
3F:推 vegired:推一下,我这三个键也是另外改的XD 10/07 22:35
4F:推 ric2k1:很实用的心得分享,先置底一下到 HW#2 due!! 10/07 23:30
5F:推 XDucka:如果is Arrowkey那样写 不是要先确定 home 跟 uparrow虽然 10/09 21:49
6F:→ XDucka:flag不一样 但是也要确定key值不一样 要是 pageup也是53 10/09 21:49
7F:→ XDucka:leftarrow也是53不就G了@@ 既然这个不会重复 那当初干嘛 10/09 21:50
8F:→ XDucka:要多设定这种27 -> 91 -> xx 的方法阿.. 10/09 21:50
9F:推 taldehyde:可以问一下1<<10的意思吗? 10/12 20:47
10F:推 OckhamsRazor:楼上装弱... 10/12 21:04
11F:→ taldehyde:楼上别这样...後来查到是bitwise-shifting 10/12 21:17
12F:推 andy13579372:感谢楼上 刚自D了一篇同样的问题文 10/13 22:48
13F:推 abc346289:所以意思是说我的home是27->79->72改完之後执行testAsc 10/14 00:19
14F:→ abc346289:按home显示"27 79 72 Home key"这样就是完成了吗? 10/14 00:20
15F:推 ric2k1:会显示 Home Key 而且再按下一个 key 也是正常的话,应该 10/14 13:44
16F:→ ric2k1:就是 OK 罗! 10/14 13:44
17F:推 ss355227:自己改完的经验,如果定义成MY_HOME_KEY,testAsc好像会 10/18 03:49
18F:→ ss355227:看不懂,应该只要HOME_KEY就好了 好像是原本就定好了 10/18 03:49
19F:推 Phantasnix:参看这篇心得指点了自己的迷惑,感谢这麽用心又条理明 10/18 20:36
20F:→ Phantasnix:晰的心得 <(_ _)> 10/18 20:36
21F:→ ypf791:姆...其实我的意思是checkChar里面 判断用MY_KEY_INT和 10/19 00:55
22F:→ ypf791:MY_KEY_FLAG之类的 但是return的时候用已经定义过的 10/19 00:55
23F:→ ypf791:直接回传MY_HOME_KEY的话的确会看不懂 10/19 00:56







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:iOS站内搜寻

TOP