据我所知,CreateAcceleratorTable函数和TranslateAccelerator函数都不处理字符串或字符数据,所以我想知道为什么它们都有Unicode和ANSI版本?这是ACCEL数据结构。
答案 0 :(得分:3)
Admin:
id - name - company
1 - teste - teste2
2 - teste3 - teste4
Docs:
id_doc - id_admin_doc - doc - value
1 - 1 - doc_1 - t
2 - 1 - doc_2 - t
3 - 1 - doc_3 - t
4 - 2 - doc_1 - t
5 - 2 - doc_2 - t
6 - 1 - doc_4 - t
7 - 2 - doc_3 - t
8 - 1 - doc_5 - t
会处理字符数据。
根据MSDN documentation of ACCEL
structure
<强>键强>
键入: WORD加速键。该成员可以是虚拟密钥代码,也可以是字符代码。
字符代码不仅仅是ASCII字符。超出ASCII范围,其含义取决于它是ANSI还是Unicode。
为什么字符代码会超过ASCII?不是我们的键盘只有ASCII字符吗?嗯,这是我的猜测。想象一下,在ANSI默认使用Shift-JIS的日本Windows上,使用假名输入的日本用户(键击可以直接键入あ/い/う/え......)按下那些假名的加速键,如{{ 1}}。
对于CreateAcceleratorTable
,由于加速器可以是非ASCII,因此还需要翻译Ctrl+あ
,TranslateAccelerator
,{{1}的密钥代码在传递给内部实现之前,将Unicode和WM_KEYDOWN
转换为Unicode。
以下代码摘自泄露的Windows 2000源代码。
Unicode版本:
WM_SYSKEYDOWN
ANSI版本:
WM_CHAR
WM_SYSCHAR
的源代码可以是found here。