我想为CTRL + A创建一个加速器。我注意到当你遗漏FVIRTKEY时它不起作用,即下面的代码片段不起作用:
a.fVirt = FCONTROL;
a.key = 'A';
a.cmd = IDM_ADD;
(仅为了完整性而使用' a'而不是' A'也不起作用)
然而,这可以正常工作:
a.fVirt = FCONTROL|FVIRTKEY;
a.key = 'A';
a.cmd = IDM_ADD;
有人可以解释这种行为吗? MSDN说,如果没有设置FVIRTKEY," key"被解释为我认为是ASCII的字符代码。但它不起作用,让我有些困惑。
谢谢!
答案 0 :(得分:1)
系统将某些 Ctrl 组合键转换为ASCII控制代码。组合 Ctrl + A 被转换为ASCII ctrl-A(SOH)字符(ASCII值0x01)。这就是为什么您的第一个代码段不会暴露所需行为的原因:它需要输入无法输入。这在MSDN中的Keyboard Input下记录。
另请注意,未提供FVIRTKEY
标记会使指定的key
区分大小写,即'a'
和'A'
映射到不同的输入。通常希望使用虚拟键码来提供一致的键盘UI。其含义在About Keyboard Accelerators - Accelerator Keystroke Assignments下解释。