三、Windows键盘消息和字符集—外语键盘问题
如果您执行美国英语版本的Windows,那么您可安装不同的键盘布局,并输入外语。可以在 控制台的键盘中安装外语键盘布局。选择 语系页面标签,按下新增 键。要查看死键的工作方式,您可能想安装「德语」键盘。此外,我还要讨论「俄语」和「希腊语」的键盘布局,因此您也可安装这些键盘布局。如果在「键盘」显示的列表中找不到「俄语」和「希腊语」的键盘布局,则需要安装多语系支持:从「控制台」中选择 新增/删除程序,然后选择 Windows安装程序页面卷标,确认选中 多语系支持复选框。在任何情况下,这些变更都需要原始的Windows光盘。
安装完其它键盘布局后,您将在工作列右侧的通知区看到一个带有两个字母代码的蓝色框。如果内定的是英语,那么这两个字母是「EN」。单击此图标,将得到所有已安装键盘布局的列表。从中单击需要的键盘布局即可更改目前活动程序的键盘。此改变只影响目前活动的程序。
现在开始进行实验。不使用UNICODE标识符定义来编译KEYVIEW1程序(在本书附带的光盘中,非Unicode版本的KEYVIEW1程序位于RELEASE子目录)。在美国英语版本的Windows下执行该程序,并输入字符『abcde』。 WM_CHAR消息与您所期望的一样:ASCII字符代码0x61、0x62、0x63、0x64和0x65以及字母a、b、c、d和e。
现在,KEYVIEW1还在执行,选择德语键盘布局。按下=键然后输入一个元音(a、e、i、o或者u)。=键将产生一个WM_DEADCHAR消息,元音产生一个WM_CHAR消息和(单独的)字符代码0xE1、0xE9、0xED、0xF3、0xFA和字符á、é、í、ó或ú。这就是死键的工作方式。
现在选择希腊键盘布局。输入『abcde』,您会得到什么?您将得到WM_CHAR消息和字符代码0xE1、0xE2、0xF8、0xE4、0xE5和字符á、狻ⅱ、� 和濉T谡饫镉行┳址?荒苷?废允尽D训滥?挥Ω玫玫较@白帜副碇械淖帜嘎穑�
现在切换到俄语键盘并重新输入『abcde』。现在您得到WM_CHAR消息和字符代码0xF4、0xE8、0xF1、0xE2和0xF3,以及字符簟ⅷāⅠ、� 和ó。而且,还是有些字母不能正常显示。您应从斯拉夫字母表中得到这些字母。
问题在于:您已经切换键盘以产生不同的字符代码,但您还没有将此切换通知GDI,好让GDI能选择适当的符号来显示解释这些字符代码。
如果您非常勇敢,还有可用的备用PC,并且是专业或全球版Microsoft Developer Network(MSDN)的订阅户,那么您也许想安装(例如)希腊版的Windows,您还可以把那四种键盘布局(英语、希腊语、德语和俄语)安装上去。现在执行KEYLOOK1,切换到英语键盘布局,然后输入『abcde』。您应得到ASCII字符代码0x61、0x62、0x63、0x64和0x65以及字符a、b、c、d和e(并且您可以放心:即使在希腊版,ASCII还是正常通行的)。
在希腊版的Windows中,切换到希腊键盘布局并输入『abcde』。您将得到WM_CHAR消息和字符代码0xE1、0xE2、0xF8、0xE4和0xE5。这与您在安装希腊键盘布局的英语版Windows中得到的字符代码相同。但现在显示的字符是、、、和。这些确实是小写的希腊字母alpha、beta、psi、delta和epsilon(gamma怎么了?是这样,如果使用希腊版的Windows,那么您将使用键帽上带有希腊字母的键盘。与英语c相对应的键正好是psi。gamma由与英语g相对应的键产生。您可在Nadine Kano编写的《Developing International Software for Windows 95 and Windows NT》的第587页看到完整的希腊字母表)。
继续在希腊版的Windows下运行KEYVIEW1,切换到德语键盘布局。输入『=』键,然后依次输入a、e、i、o和u。您将得到WM_CHAR消息和字符代码0xE1、0xE9、0xED、0xF3和0xFA。这些字符代码与安装德语键盘布局的英语版Windows中的一样。不过,显示的字符却是、、、和ϊ,而不是正确的á、é、í、ó和ú。
现在切换到俄语键盘并输入『abcde』。您会得到字符代码0xF4、0xE8、0xF1、0xE2和0xF3,这与安装俄语键盘的英语版Windows中得到的一样。不过,显示的字符是、、、和,而不是斯拉夫字母表中的字母。
您还可安装俄语版的Windows。现在您可以猜到,英语和俄语键盘都可以工作,而德语和希腊语则不行。
现在,如果您真的很勇敢,您还可安装日语版的Windows并执行KEYVIEW1。如果再依美国键盘输入,那么您将输入英语文字,一切似乎都正常。不过,如果切换到德语、希腊语或者俄语键盘布局,并且试著作上述介绍的任何练习,您将看到以点显示的字符。如果输入大写的字母-无论是带重音符号的德语字母、希腊语字母还是俄语字母-您将看到这些字母显示为日语中用于拼写外来语的片假名。您也许对输入片假名感兴趣,但那不是德语、希腊语或者俄语。
远东版本的Windows包括一个称作「输入法编辑器」(IME)的实用程序,该程序显示为浮动的工具列,它允许您用标准键盘输入象形文字,即汉语、日语和朝鲜语中使用的复杂字符。一般来说,输入一组字母后,组成的字符将显示在另一个浮动窗口内。然后按 Enter键,合成的字符代码就发送到了活动窗口(即KEYVIEW1)。KEYVIEW1几乎没什么响应-WM_CHAR消息带来的字符代码大于128,但这些代码没有意义(Nadine Kano的书中有许多关于使用IME的内容)。
这时,我们已经看到了许多KEYLOOK1显示错误字符的例子-当执行安装了俄语或希腊语键盘布局的英语版Windows时,当执行安装了俄语或德语键盘布局的希腊版Windows时,以及执行安装了德语、俄语或者希腊语键盘布局的俄语版Windows时,都是这样。我们也看到了从日语版Windows的输入法编辑器输入字符时的错误显示。