理解虛擬鍵碼,掃瞄碼和ASCII字元碼

2021-08-29 03:14:44 字數 1058 閱讀 9080

關鍵字:

虛擬鍵碼:virtual-key,掃瞄碼:scan code,ascii字元碼

在編寫mfc應用程式過程中,需要對原有的cedit作功能上的擴充套件,新生成的類ceditex繼承於cedit,只允許使用者輸入數字和小數點。

要實現只允許使用者輸入數字和小數點,需要遮蔽非數字和小數點的字元,遮蔽工作在onchar訊息函式中進行:當按下鍵盤後,解發wm_char訊息,並進入onchar訊息函式,用::isdigit(nchar)驗證數字,用nchar == '.'驗證小數點,滿足其一即呼叫父類onchar函式繼續處理:cedit::onchar(nchar, nrepcnt, nflag)。

另外,一些按鍵如esc、tab鍵,當按下後並不能夠觸發wm_char訊息並進入onchar訊息函式,這時需要在pretranslatemessage函式中用::translatemessage函式對pmsg訊息翻譯處理,其實也就是在這個函式中將

虛擬鍵碼(virtua- key)

即pmsg->wparam重新翻譯為

ascii字元碼,當翻譯的

ascii字元碼在0-127之間時,將向訊息佇列中遞交字元訊息wm_char。

試一下:

如果在呼叫::translatemessage函式後立刻用getmessage截獲訊息msg,將會發現下乙個訊息是wm_char,並且wparam已被翻譯為ascii字元碼。

理解1.

onchar函式引數變數nchar是ascii字元碼,經過試驗只有當按鍵所對應的ascii碼在0-127之間時才觸發wm_char訊息,並進入onchar訊息函式,例如:鍵入上下左右鍵,是不會進入onchar函式的。

理解2.

如果對計算機鍵盤i/o比較了解,應該知道鍵盤上每乙個鍵對應乙個掃瞄碼,掃瞄碼是由oem生商制定的,不同廠商生產的鍵盤同樣乙個按鍵的掃瞄碼都有可能出現不一致的情況,為擺脫由於系統裝置不一致造成掃瞄碼不一致的情形,通過鍵盤驅動程式將掃瞄碼對映為統一的虛擬鍵碼表示,如回車鍵定義為vk_return,其16進製制值為0x0d。

彙編顯示鍵盤掃瞄碼和ASCII碼

題目及要求如下 利用中斷型別16h呼叫鍵盤i o介面程式,並顯示由鍵盤中斷程式送回的掃瞄碼和ascii碼。顯示的格式如下 scan ascii char 1e 61 a 30 62 b 2e 63 c 按ctrl c可以中止程式。ctrl c對應的ascii碼為03h。練習將二進位制數轉換為16進製...

ASCII碼和字符集

字串常見api charcodeat fromcharcode 應用程式介面 charcodeat方法返回字串指定位置的 unicode 碼點 十進位制表示 相當於string.fromcharcode 的逆操作。abc charcodeat 1 98 上面 中,abc的1號位置的字元是b,它的 u...

和 字母數字對應的ASCII碼。

列印a z a z 0 9對應的ascii碼。system.out.println a int a system.out.println z int z system.out.println system.out.println a int a system.out.println z int z ...