欢迎来到天天文库
浏览记录
ID:43739328
大小:291.50 KB
页数:41页
时间:2019-10-13
《第5章 键盘与鼠标》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、第5章Windows应用程序对键盘与鼠标的响应扫描码是依赖于具体设备的,为达到设备无关性的要求,往往使用与具体设备无关的虚拟码,虚拟码是由Windows系统定义的与设备无关的键的标识由于键盘的输入按键信息扫描码、虚拟码以及其他与按键有关的消息设备驱动程序截取键的扫描码翻译虚拟码它含键盘上的键对应一个唯一的标识值(扫描码)按下或释放某键时产生取出键盘消息进行处理信息设备驱动程序把消息放到系统的消息队列中Windows从系统消息队列中取出消息发送到相应的线程消息队列中窗口过程5.1键盘在应用程序中的应用虚拟码是一种与设备无关的键盘编码,它的值存放在键盘消息的wParam参数中,用以标识哪
2、一个键被按下或释放,最常用的虚拟码已经在Windows.h(Winuser.h)中定义。操作系统在接收到键盘输入后把消息发送给具有“输入焦点(inputfocus)的窗口应用程序一般有几个窗口,但当按下某一个键时,只有一个窗口能接收到该键盘消息,接收这个键盘消息的窗口称为有“输入焦点”的窗口有“输入焦点”的窗口应是活动窗口或者活动窗口的子窗口窗口正在接收输入焦点窗口函数通过捕获WM_SETFOCUS和WM_KILLFOCUS消息确定当前窗口是否具有输入焦点。窗口失去输入焦点键盘消息按键消息字符消息按下或松开一个键时就产生了一按键消息一个按键的组合产生了一个可以显示的字符时,就产生了一个
3、字符消息系统按键消息非系统按键消息Alt键与相关输入键的组合产生的消息,这些键一般由Windows系统内部直接处理,应用程序不处理若应用程序处理了这些系统键消息,还要调用DefWindowsProc()函数,以便不影响系统对它们的处理不使用Alt键组合的按键消息键盘按键消息系统中系统按键与非系统按键是截然不同的,系统按键产生系统按键消息:WM_SYSKEYDOWN、WM_SYSKEYUP,而非系统按键产生非系统按键消息:WM_KEYDOWN与WM_KEYUP。如果窗口处理函数确实有必要处理系统按键消息的,一定要在处理完毕后,把消息传递给DefWindowProc函数。否则,所有的系统操
4、作,包括ALT键都会失效,即便窗口的确获得了焦点。也就是说,用户将不能访问窗口菜单或者系统菜单,又或者使用ALT+ESC(ALT+TAB)组合键激活其他窗口了。键盘按键消息系统按键消息主要是系统使用的,系统用这些消息提供菜单的内置键盘接口,以及允许用户控制激活不同的窗口。系统按键消息通常是用户按下ALT及某个键的组合键时产生的,又或者在用户按下但没有窗体拥有键盘焦点(比如,激活的应用程序最小化)时产生。如果消息产生的话,就会发送到激活窗体的消息队列中。非系统按键消息是需要应用程序窗体处理的,DefWindowProc函数不会对这些消息作任何处理,窗体的处理过程可以忽略任意的不需要的非系
5、统按键消息。按键消息的两个参数wParamlParam32位重复计数位(0~15位)ScanCode扫描码(16~23位)扩展键标志(24位)保留位(25~28位)上下文标志(29位)键的先前状态(位30)转换状态(31位)包含了识别按下的键的虚键码扩充键标志扩充键标志用来标识按键消息中是否包含了增强型键盘的附加键,这些扩充键包括:键盘右手边的ALT、CTRL键,INS、DEL、HOME、END、PAGEUP、PAGEDOWN,小键盘左边的方向键,NUMLOCK、BREAK(CTRL+PAUSE)、PRINTSCRNT以及小键盘上的除号(/)键及ENTER键。如果键为以上键的话,扩充键
6、标志置为1。上下文标志上下文标志是为了说明按键消息产生时,ALT键是否已经按下,如果为1,表示ALT键已经按下,否则没有按下。字符消息-WM_CHAR按键消息可以提供许多按键的基本信息,但却不提供字符键的字符码,要想得到字符码,应用程序必须在自己的线程循环中包含TranslateMessage函数,TranslateMessage传递WM_KEYDOWN或WM_SYSKEYDOWN消息到键盘布局,通过检查消息的虚键码,如果发现它是一个字符键的话,键盘布局就会提供一个字符码的等价物,然后产生一个包括字符码的字符消息,并放到消息队列的头部。消息循环的下一次处理就会把字符消息从队列中删除,并
7、分发给相应的窗口处理过程。WM_CHAR字符消息系统非系统WM_KEYDOWN和WM_KEYUP的按键消息只能产生非系统消息WM_SYSKEYDOWN和WM_SYSKEYUP按键消息只能产生系统消息【例5-1】设计一个窗口,在该窗口中练习键盘的响应,要求如下:(1)单击键盘上的向上箭头时,窗口中显示“Youhadhittedtheupkey”(2)单击键时,窗口中显示“YouhadhittedtheSHIFTkey”(3)单击
此文档下载收益归作者所有