关於电脑键盘的基础知识.pdf
《关於电脑键盘的基础知识.pdf》由会员分享,可在线阅读,更多相关《关於电脑键盘的基础知识.pdf(71页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、於重月,维然的基够知在Microsoft Windows 98中,键盘和鼠标是两个标准的使用者输入来源,在一些连贯操作中常产生互补作用。当然,鼠标在今天的应用程序中比十年前使用得更为广泛。甚至在一些应用程序中,我们更习惯于使用鼠标,例如在游戏、画图程序、音乐程序以及Web浏览器等程序中就是这样。然而,我们可以不使用鼠标,但绝对不能从一般的PC中把键盘拆掉。相对于个人计算机的其它组件,键盘有非常久远的历史,它起源于1874年的第一台Remington打字机。早期的计算机程序员用键盘在Hollerith卡片上打孔,后来在终端机上用键盘直接与大型主机沟通。PC上的键盘在某些方面进行了扩充,加上了功能
2、键、光标移动键和单独的数字键盘,但它们的输入原理基本相同。键盘基础您大概已经猜到Windows程序是如何获得键盘输入的:键盘输入以消息的形式传递给程序的窗口消息处理程序。实际上,第一次学习消息时,键盘事件就是一个消息如何将不同型态信息传递给应用程序的显例。Windows用八种不同的消息来传递不同的键盘事件。这好像太多了,但 是(就像我们所看到的一 样)程序可以忽略其中至少半的消息而不会有任何问题。并且,在大多数情况下,这些消息中包含的键盘信息会多于程序所需要的。处理键盘的部分工作就是识别出哪些消息是重要的,哪些是不重要的。忽略键盘虽然键盘是Windows程序中使用者输入的主要来源,但是程序不必
3、对它接收的所有消息都作出响应。Windows本身也能处理许多键盘功能。例如,您可以忽略那些属于系统功能的按键,它们通常用到Alt键。程序不必监视这些按键,因为Windows会将按键的作用通知程序(当然,如果程序想这么做,它也能监视这些按键)。虽然呼叫程序菜单的按键将通过窗口的窗口消息处理程序,但通常内定的处理方式是将按键传递给DefWindowProCo最终,窗口消息处理程序将获得一个消息,表示一个菜单项被选择了。通常,这是所有窗口消息处理程序需要知道的(在第卜章将介绍菜单)。有些Windows程序使用 键盘快捷键 来启动通用菜单项。快捷键通常是功能键或字母同Ctrl键的组合(例如,CtH-S
4、用于保存文件)。这些键盘快捷键与程序菜单一起在程序的资源描述文件中定义(我们可以在第十章看到)。Windows将这些键盘快捷键转换为菜单命令消息,您不必自己去进行转换。对话框也有键盘接口,但是当对话框处于活动状态时,应用程序通常不必监视键盘。键盘接口由Windows处理,Windows把关于按键作用的消息发送给程序。对话框可以包含用于输入文字的编辑控件。它们 般是小方框,使用者可以在框中键入字符串。Windows处理所有编辑控件逻辑,并在输入完毕后,将编辑控件的最终内容传送给程序。关于对话框的详细信息,请参见第十一章。编辑控件不必局限于单独行,而且也不限于只在对话框中。个在程序主窗口内的多行编
5、辑控件就能够作为一个简单的文字编辑器了(参见第九、十、十一和十三章的POPPAD程序)。Windows甚至有一个Rich Text文字编辑控件,允许您编辑和显示格式化的文字(请参见/Platform SDK/User Interface Services/Controls/Rich Edit Controls)您将会发现,在开发Windows程序时,可以使用处理键盘和鼠标输入的 窗口控件来将较高层的信息传递回父窗口。只要这样的控件用得够多,您就不会因处理键盘消息而烦恼了。谁获得了焦点与所有的个人计算机硬件样,键盘必须由在Windows下执行的所有应用程序共享。有些应用程序可能有多个窗口,键盘必
6、须由该应用程序内的所有窗口共享。回想一下,程序用来从消息队列中检索消息的MSG结构包括hwnd字段。此字段指出接收消息的窗口控件码。消息循环中的DispatchMessage函数向窗口消息处理程序发送该消息,此窗口消息处理程序与需要消息的窗口相联系。在按下键盘上的键时,只有一个窗口消息处理程序接收键盘消息,并且此消息包括接收消息的窗口控件码。接收特定键盘事件的窗口具有输入焦点。输入焦点的概念与活动窗口的概念很相近。有输入焦点的窗口是活动窗口或活动窗口的衍生窗口(活动窗口的子窗口,或者活动窗口子窗口的子窗口等等)。通常很容易辨别活动窗口。它通常是顶层窗口一也就是说,它的父窗口句柄是NULL。如果
7、活动窗口有标题列,Windows将突出显示标题列。如果活动窗口具有对话框架(对话框中很常见的格式)而不是标题列,Windows将突出显示框架。如果活动窗口目前是最小化的,Windows将在工作列中突出显示该项,其显示就像一个按卜的按钮。如果活动窗口有子窗口,那么有输入焦点的窗口既可以是活动窗口也可以是其子窗口。最常见的子窗口有类似以下控件:出现在对话框中的下压按钮、单选钮、复选框、滚动条、编辑方块和清单方块。子窗口不能自己成为活动窗口。只有当它是活动窗口的衍生窗口时,子窗口才能有输入焦点。了窗口控件般通过显示一个闪烁的插入符号或虚线来表示它具有输入焦点。有时输入焦点不在任何窗口中。这种情况发生
8、在所有程序都是最小化的时候。这时,Windows将继续向活动窗口发送键盘消息,但是这些消息与发送给非最小化的活动窗口的键盘消息有不同的形式。窗口消息处理程序通过拦截WM_SETFOCUS和WM_KILLFOCUS消息来判定它的窗口何时拥有输入焦点。WM_SETFOCUS指示窗口正在得到输入焦点,WM_KILLFOCUS表示窗口正在失去输入焦点。我将在本章的后面详细说明这些消息。队列和同步当使用者按下并释放键盘上的键时,Windows和键盘驱动程序将硬件扫描码转换为格式消息。然而,这些消息并不保存在消息队列中。实际上,Windows在所谓的 系统消息队列中保存这些消息。系统消息队列是独立的消息队
9、列,它由Windows维护,用于初步保存使用者从键盘和鼠标输入的信息。只有当Windows应用程序处理完前一个使用者输入消息时,Windows才会从系统消息队列中取出下一个消息,并将其放入应用程序的消息队列中。此过程分为两步:首先在系统消息队列中保存消息,然后将它们放入应用程序的消息队列,其原因是需要同步。就像我们刚才所学的,假定接收键盘输入的窗口就是有输入焦点的窗口。使用者的输入速度可能比应用程序处理按键的速度快,并且特定的按键可能会使焦点从一个窗口切换到另一个窗口,后来的按键就输入到了另一个窗口。但如果后来的按键已经记下了目标窗口的地址,并放入了应用程序消息队列,那么后来的按键就不能输入到
10、另一个窗口。按键和字符应用程序从Windows接收的关于键盘事件的消息可以分为按键和字符两类,这与您看待键盘的两种方式一致。首先,您可以将键盘看作是键的集合。键盘只有唯一的A键,按下该键是一次按键,释放该键也是一次按键。但是键盘也是能产生可显示字符或控制字符的输入设备。根据Ctrl、Shift和Caps Lock键的状态,A键能产生几个字符。通常情况下,此字符为小写a。如果按下Shift键或者打开了 Caps Lock,则该字符就变成大写A。如果按下了 C trl,则该字符为Ctrl-A(它在 ASCII中有意义,但在Windows中可能是某事件的键盘快捷键)。在一些键盘匕A 按键之前可能有
11、死字符键(dead-character key)或者Shift、Ctrl或者Alt的不同组合,这些组合可以产生带有音调标记的小写或者大写,例如,a,鼠狡2 0.、或拧?/p对产生可显示字符的按键组合,Windows不仅给程序发送按键消息,而且还发送字符消息。有些键不产生字符,这些键包括shift键、功能键、光标移动键和特殊字符键如Insert和 Delete。对于这些键,Windows只产生按键消息。按键消息当您按下一个键时,Windows把 WM_KEYDOWN或者WM_SYSKEYDOWN消息放入有输入焦点的窗口的消息队列;当您释放个键时,Windows把WM_KEYUP或者WM_SYSK
12、EYUP消息放入消息队列中。表6-1键按下键释放非系统键WM_KEYDOWNWM_KEYUP系统键WM_SYSKEYDOWN WM_SYSKEYUP通 常 down(按下)和 up(放开)消息是成对出现的。不过,如果您按住一个键使得自动重复功能生效,那么当该键最后被释放时,Windows会给窗口消息处理程序发送系列WM_KEYDOWN(或者 WM_SYSKEYDOWN)消息和一个 WM_KEYUP(或者WM_SYSKEYUP)消息。像所有放入队列的消息样,按键消息也有时间信息。通过呼叫GetMessageTime,您可以获得按下或者释放键的相对时间。系统按键与非系统按键WM_SYSKEYDOW
13、N和 WM_SYSKEYUP中的 SYS 代表 系统,它表示该按键对Windows比对Windows应用程序更加重要。WM_SYSKEYDOWN和 WM_SYSKEYUP消息经常由与Alt相组合的按键产生,这些按键启动程序菜单或者系统菜单上的选项,或者用于切换活动窗 I等系统功能(Alt-Tab或者Alt-Esc),也可以用作系统菜单快捷键(Alt键与 个功能键相结合,例如Alt-F4用于关闭应用程序)。程序通常忽略WM_SYSKEYUP和 WM_SYSKEYDOWN消息,并将它们传送至ij DefWindowProc。由于Windows要处理所有Alt键的功能,所以您无需拦截这些消息。您的窗
14、口消息处理程序将最后收到关于这些按键结果(如菜单选择)的其它消息。如果您想在自己的窗口消息处理程序中加上拦截系统按键的程序代码(如本章后面的KEYVIEW1和KEYVIEW2程序所作的那样),那么在处理这些消息之后再传送到DefWindowProc,Windows就仍然可以将它们用于通常的目的。但是,请再考虑一下,几乎所有会影响使用者程序窗口的消息都会先通过使用者窗口消息处理程序。只有使用者把消息传送到DefWindowProc,Windows才会对消息进行处理。例如,如果您将下面几行叙述:c a s e W M _ S Y S K E Y D O W N:c a s e W M S Y S
15、K E Y U P:c a s e W M _ S Y S C H A R:r e t u r n 0 ;加入到一个窗口消息处理程序中,那么当您的程序主窗口拥有输入焦点时,就可以有效地阻止所有Alt键操作(我将在本章的后面讨论WM_SYSCHAR),其中包括Alt-Tab、Alt-Esc以及菜单操作。虽然我怀疑您会这么做,但是,我相信您会感到窗口消息处理程序的强大功能。WM_KE丫DOWN和WM_KEYUP消息通常是在按卜或者释放不带Alt键的键时产生的,您的程序可以使用或者忽略这些消息,Windows本身并不处理这些消息。对所有四类按键消息,wParam是虚拟键代码,表示按下或释放的键,而I
16、Param则包含属于按键的其它数据。虚拟键码虚拟键码保存在 WM_KEYDOWN、WM_KEYUP、WM_SYSKEYDOWN 和 WM_SYSKE丫UP消息的wParam参数中。此代码标识按下或释放的键。哈,又 是 虚拟,您喜欢这个词吗?虚拟指的是假定存在于思想中而不是现实世界中的一些事物,也只有熟练使用DOS汇编语言编写应用程序的程序写作者才有可能指出,为什么对Windows键盘处理如此基本的键码是虚拟的而不是真实的。对于早期的程序写作者来说,真实的键码由实际键盘硬件产生。在Windows文件中将这些键码称 为 扫描码(scan codes)。在IBM兼容机种上,扫描码16是Q键,17是W
17、键,18是E、19是R,20是T,21是丫等等。这时您会发现,扫描码是依据键盘的实际布局的。Windows开发者认为这些代码过于与设备相关了,于是他们试图通过定义所谓的虚拟键码,以便经由与设备无关的方式处理键盘。其中一些虚拟键码不能在IBM兼容机种上产生,但可能会在其它制造商生产的键盘中找到,或者在未来的键盘上找到。您使用的大多数虚拟键码的名称在WINUSER,H表头文件中都定义为以VK_开头。表6-2列出了这些名称和数值(十进制和十六进制),以及与虚拟键相对应的IBM兼容机种键盘上的键。卜表也标出了 Windows执行时是否需要这些键。下表还按数字顺序列出了虚拟键码。前四个虚拟键码中有三个指
18、的是鼠标键:表 6-2十进制 十六进制 WINUSER.H标识符 必需?IBM兼容键盘101VK_LBUTTON鼠标左键202VK_RBUTTON鼠标右键303VK_CANCELCtrl-Break404VK_M BUTTON鼠标中键您永远都不会从键盘消息中获得这些鼠标键代码。在下一章可以看到,我们能够从鼠标消息中获得它们。VK_CANCEL代码是一个虚拟键码,它包括同时按下两个键(Ctrl-Break)。Windows应用程序通常不使用此键。表 6-3 中的键一Backspace、Tab、Enter,Escape 和 Spacebar一通常用于 Windows 程序。不过,Windows 般
19、用字符消息(而不是键盘消息)来处理这些键。表 6-3十进制 十六进制 WINUSER.H标识符 必需?IBM兼容键盘808VK_BACKVBackspace909VK_TABVTab120CVK_CLEARNum Lock关闭时的数字键盘5130DVK_RETURNVEnter(或者另一个)1610VK_SHIFTVShift(或者另一个)1711VK_CONTROLVCtrl(或者另一个)1812VK_MENUVAlt(或者另一个)1913VK_PAUSEPause2014VK_CAPITALVCaps Lock271BVK_ESCAPEVEsc3220VK_SPACEVSpacebar另外
20、,Windows程序通常不需要监视Shift、Ctrl或Alt键的状态。表6-4列出的前八个码可能是与VK_INSERT和VK.DELETE 一起最常用的虚拟键码:表 6-4十进制 十六进制 WINUSER.H标识符 必需?IBM兼容键盘3321VK_PRIORVPage Up3422VK_NEXTVPage Down3523VK_ENDVEnd3624VK_HOMEVHome3725VK_LEFTV左箭头3826VK_UPV上箭头3927VK_RIGHTV右箭头4028VK_DOWNV下箭头4129VK_SELECT422AVK_PRINT432BVK_EXECUTE442CVK_SNAPS
21、HOTPrint Screen452DVK_INSERTVInsert462EVK_DELETEDelete472FVK_HELP注意,许多名称(例如VK_PRIOR和 VK_NEXT)都与键上的标志不同,而且也与滚动条中的标识符不统一。Print Screen键在平时都被Windows应用程序所忽略。Windows本身响应此键时会将视讯显示的位图影本存放到剪贴板中。假使有键盘提供了 VK_SELECT、VK_PRINT、VK_EXECUTE和 VK_HELP,大概也没几个人看过那样的键盘。Windows也包括在主键盘上的字母和数字键的虚拟键码(数字键盘将单独处理)。表6-5十进制 十六进制W
22、INUSER.H标识符 必需?IBM兼容键盘48-57 30-39无E键盘上的0至1965-90 41-5A无VA到Z注意,数字和字母的虚拟键码是ASCII码。Windows程序几乎从不使用这些虚拟键码;实际I-.程序使用的是ASCII码字符的字符消息。表 6-6所示的代码是由Microsoft Natural Keyboard及其兼容键盘产生的:表6-6十进制 十六进制WINUSER.H标识符 必需?IBM兼容键盘915BVK_LWIN左 Windows 键925CVK_RWIN右 Windows 键935DVK_APPSApplications 键Windows用 VK_LWIN和 VK_
23、RWIN键打开 开始菜单或者(在以前的版本中)启 动 I作管理员程序。这两个都可以用于登录或注销Windows(只在Microsoft Windows NT中有效),或者登录或注销网络(在 Windows for Applications中)=应用程序能够通过显示辅助信息或者当成快捷方式键看待来处理application键。表 6-7所示的代码用于数字键盘上的键(如果有的话):表6-7十进制卜六进制WINUSER.H标识符必需?IBM兼容键盘96-105 60-69VK_NUMPAD0 至ij VK_ NUMPAD9-1NumLock打开时数字键盘上的0至ij 91066AVK_MULTIPL
24、Y数字键盘上的*1076BVK_ADD数字键盘上的+1086CVK_SEPARATOR1096DVK_SUBTRACT数字键盘上的-1106EVK_DECIMAL数字键盘上的.11 16FVK_DIVIDE数字键盘上的/最后,虽然多数的键盘都有12个功能键,但 Windows只需要10个,而位旗标却有24个。另外,程序通常用功能键作为键盘快捷键,这样,它们通常不处理表6-8所示的按键:表6-8十进制十六进制WINUSER.H标识符 必需?IBM兼容键盘112-121 70-79VK_F1 到 VK_F10功能键F1到F10122-135 7A-87VK_F11 到 VK_F24功能键F11至1
25、F2414490VK_NUMLOCKNum Lock14591VK_SCROLLScroll Lock另外,还定义了一些其它虚拟键码,但它们只用于非标准键盘上的键,或者通常在大型主机终端机上使用的键。查看/Platform SDK/User Interface Services/User Input/Virtual-KeyCodes,可得到完整的列表。IParam信息在四个按键消息(WM_KEYDOWN、WM_KEYUP、WM_SYSKEYDOWN 和 WM_SYSKEYUP)中,wParam消息参数含有上面所讨论的虚拟键码,而IParam消息参数则含有对了解按键非常有用的其它信息。IPara
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 关於 电脑 键盘 基础知识
限制150内