📄 untitled-37.txt
字号:
3.2.5字符消息
如果对于键盘输人只依靠键抬起和键按下消息,那么在下面的情形下就会遇到·个问
题。假定您正在编写一个文本编辑器,它把报告字符键被接下的消息转换为在屏幕上显示
的字符。 A键被按下,带有虚拟键代码等于 ox41的 WM.KEYDOWN消息就到达。在把 A放
置在屏幕上之前,要调用::GetKeystate来确定 Shift键是否被接下了。如果是,将输出·个大
写字母“A”;否则,输出一个小写“a”。如果是这样,那很好。但是如果 Caps Inch也被激活
了怎么办? CaPs lock键撤消了 Shift键的影响,将“A”转换为“。”以及“。”转换为“A”。现在您
需要考虑A字母的4种不同转换了:
——
虚拟健代码VIL-SHIFT Caps I,)ck结果
ox41否关
ox41是关A
ox41否开 A
ox41是开
您可能非常希望编写能够处理这些变换和切换所有可能状态的程序来解决这个问题,
这样您的工作就被用户可能按下Ctri键这个事实搞复杂了。而且如果您的应用程序在美国
以外使用时,问题只能更大,在别处键盘布局与美国的可能完全不同。一个美国用户按下
Shift-0会输人一个右括号。但是Shift*0在大多数国际性键盘产生一个等号而在荷兰键盘上
产生撇号。如果您的程序显示的字符与他们输人的字符不匹配,我想用户是不太会欣赏这
个程序的吧。
这就是 Windows提供了::TranslateMessase API函数的原因。:: TIansfateMess叫罗将与字符
键有关的击键消息转换为 WM.CHAR消息。 MFC提供的消息循环会为您调用:: Tffos-
lateMessage,因此在MFC应用程序中您不必执行特殊任务来将击键消息转换为WM_CHAR
消息。当对键盘输入使用WM—CHAR消息时,因为每个WM_CHAR消息都包含一个与AN-
SI字符集(Windo。98)或Ullicode字符集(Willd。WS 2000)中的符号直接映射的字符代码,所
以您不必为虚拟键代码和转换状态担心。假设CapSInCk没被打开,按下Shift.A会产生如下
消息序列:
——
消息虚拟键代码字符代码
W M.丑**00*N*K一S*M
WM一gyYDOWN OX41
WM—CHAR ox41(IIA")
WM.KEYUP OX41
WM_KEYUP VK.SHIFT
——
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -