5 鼠标与键盘.pptVIP

  1. 1、本文档共31页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
鼠标和键盘 本章主要内容 如何检测一个键已被按下。 如何检测哪一个键已被按下。 如何检测系统键(Alt)是否已被按下 如何追踪鼠标的位置 如何检测鼠标键被按下 如何检测是否双击(double-clicks) 本章的大部分内容不很困难,但却很重要,因为它概括了很多基本的 I/O 服务。 KeyMouse 程序 KeyMouse 程序提供两种主要的服务: 如何检测一个键被按下,并且显示按下键的键值以及一些相关的信息。 如何检测鼠标的移动或鼠标是否被按下,并在屏幕上显示出鼠标的当前位置及状态。 在 Windows 程序设计中,焦点的概念是很重要的。只有被聚焦的窗口才会响应键盘和鼠标的输入,而没有被聚焦的窗口是不响应的。你经常可以知道哪一个特定程序处于焦点,只要检查一下它的标题栏是否为高亮度显示就可以了。 同样十分重要的是要理解一个时刻只有一个窗口处于聚焦状态。例如,如果你打开 File 菜单,那么这个新打开的菜单处于焦点位置,而程序的主窗口就处于非活动状态。同样,在 My Computer 窗口中,当从 View 菜单中弹出 Options 对话框时,这个对话框是焦点,而 My Computer 窗口的其它部分是不活动的。 Windows 的键盘和鼠标消息 WM_CHAR 消息的处理 每当用户按下字母数字键时,就会发送 WM_CHAR 消息。也就是说,当你按下 A-Z 键中的任何一个字母或者 0-9 键中任何一个数字键时,你都会得到一个WM_CHAR 消息。无论用户按下键盘上的任何一个键,都会发送 WM_KEYDOWN 消息,不管该键是字母、数字还是其它符号。例如,若按下 Delete 键就会产生一条 WM_KEYDOWN 消息,而不是 WM_CHAR 消息。 WM_CHAR 消息的处理 下面列出 KeyMouse 程序中对 WM_CHAR 消息的处理语句: void skyline_OnChar(HWND hwnd,UINT ch,int cRepeat) { char S[100]; HDC DC = GetDC(hwnd); sprintf(S,WM_CHAR == Char = %c cRepeat = %d , ch,cRepeat); TextOut(DC,Xval,Yval+20,S,strlen(S)); ReleaseDC(hwnd,DC); } skyline_OnChar 函数所做的第一件事情是得到一个设备描述表,它不是通过调用 BeginPaint 和 EndPaint 函数而是通过调用 GetDC 函数和 ReleaseDC 函数来取得设备描述表的。TextOut 函数使用设备描述表把信息显示在屏幕上。 当用户按下一个标准键,就有一条 WM_CHAR 消息送给程序。也就是,当用户按 A 或 B 键,一条 WM_CHAR 消息就是被发送。但是当用户按下功能键或数字键盘上的箭头键时并不发送 WM_CHAR 消息。   当按下一个标准键时,该键相应的键值就被发送到 skyline_OnChar 函数的的 ch 变量中。该变量是一个无符号整数。也就是说,如果用户按下 A 键,变量 ch 就被置成 ASCII 值 97 —— 它是字母 a;如果用户在按 A 键的同时还按下 SHIFT 键,则将 ASCII 值 65 送到变量 ch 中,ASCII 值 65 代表字母 A 在调用 WM_CHAR 中,如果一个键被重复按多次,按下的次数就送到变量 CRepeat 中去。虽然这个信息通常并不重要,Windows 仍然把它传送给你。 skyline_OnChar 函数利用了 WindowsX 一系列功能。如果 KeyMouse 没有利用 WindowsX 这些功能,就要自己扫描传给 WndProc 的参数 wParam 和 lParam,以确定按下键的正确键值及重复次数。重复次数信息是存放在 lParam 的低字节中,其高位字中保留了几个信息,而应用程序一般用不到这些消息,因此并未把高位字节传送给 skyline_OnChar。   在 WindowsX 出现以前,程序设计人员要了解这些信息必须要靠自己阅读参考手册来弄懂 wParam 和 lParam 中各域的含义。 注意事项: 使用 WM_CHAR 消息来读取字母数字键。在发送 WM_CHAR 消息之前,由 Windows 将按键正确翻译。因此,WM_CHAR 消息是一种理想方式用来告知是否按下一个字母或数字键。 不可使用 WM_CHAR 消息试图去检测一个功能键或箭头键是否已被压下。 使用 WM_KEYDOWN 消息用来确定一个功能键或箭头键是否已被按下。 不可使用 WM_KE

您可能关注的文档

文档评论(0)

kehan123 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档