開始玩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] -> [識別碼]
所以就這樣定義常數:
//
//