欢迎来到天天文库
浏览记录
ID:39549474
大小:34.08 KB
页数:19页
时间:2019-07-06
《C#-windows学习笔记续键盘输入》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、windows学习笔记续键盘输入2008-02-0415:13键盘输入这节讲述windows如何产生键盘输入和程序如何接受和处理输入;所有Microsoftwindows的应用程序应该能够从键盘和鼠标接收用户的输入,windows应用程序是以处理投递到窗口的消息的形式接收键盘输入的。键盘输入模式windows系统通过安装与当前键盘相应的键盘设备驱动程序为应用程序提供设备独立键盘支持,windows系统还通过使用由当前用户或应用程序选中的语言特有的键盘配置.提供语言独立键盘支持。键盘设备驱动器从键盘接收的扫描码,
2、被发送到键盘配置,在这里扫描码被翻译成消息并投递到应用程序中相应的窗口。给键盘上的每一个键赋唯一的值称之为扫描码,它是一个键盘键的设备独立标识。在用户敲键时键盘产生两个扫描码——一个是在用户按下键.另一个是在用户释放键。键盘设备驱动程序截取一个扫描码,并把它翻译(映射)成虚键码.它是由windows系统定义的用来标识键的设备独立值。翻译了一个扫描码之后,键盘创建一条含有扫描码、虚键码及有关击键的其它信息的消息,然后再把这条消息放到系统消息队列中。windows从系统消息队列中移走这条消息,再把它投递到相应的线程
3、消息队列中去。下图说明的是windows系统的键盘输入模式。键盘焦点和激活windows系统把键盘消息投递到创建具有输入焦点的窗口的线程消息队列中,键盘焦点是窗口的一个临时局性。windows系统通过移动键盘焦点让显示在屏幕上的所有窗口共享键盘,根据用户的意图,可以把键盘焦点从一个窗口移到另一个窗口。在键盘焦点没有移到另一个窗口之前,有键盘焦点的窗口接收(从创建它的线程的消息队列中)所有键盘消息。一个线程可调用函数GetFocus来确定它的窗口(如果有的话)当前是否有键盘焦点,线程也可以调用函数SetFocus
4、来把键盘焦点赋给它的窗口之一。如果键盘焦点从—个窗口改变到另一个窗口,系统向将要失去焦点的窗口发送WM_KILLFOCUS消息,而把WM_SETFOCUS消息发送给将要得到焦点的窗口。键盘焦点的概念是与活动窗口紧密相关的,活动窗口是用户当前正在使用的顶层窗口。有键盘焦点的窗口可以是活动窗口本身,或者是活动窗口的一个子窗口。所以用户可以很容易地识别活动窗口.系统把它放在Z次序的顶部.并高亮显示它的标题栏(如果有的话)以及边框。用户可通过单击来激活一个窗口,也可以通过用ALT+TABorALT+ESC组合键来选择它
5、,或者是从MIi现中选择它。一个线程可通过使用函数SetActiveWindow来激活一个顶层窗口,使用函数GetActiveWindow可以确定一个顶层窗口是否是活动的。如果一个窗口被禁止,而另——个被激活.windows系统把WM_ACTIVATE消息先发送到将要被禁止的窗口,然后再发送到将要被激活的窗口,如果一个窗口将被禁止,那么wParam参数的低位字是0,非0则表明这个窗口将被激活。如果默认窗口过程接收到WM_ACTIVATE消息,它就把键盘焦点设到活动窗口。击键消息按下一个键就会产生一条WM_KEY
6、DOWN和WM_SYSKEYDOWN消息,并将被放到与有键盘输入的窗口相应的线程消息队列中,释放一个键则会产生一条WM_KEYUP和WM_SYSKEYUP消息,同样也会被放到队列中。按键和释放键消息通常是成对出现的,但如果用户按住键到一定的时间就启动了键盘的自动重复持性,系统就会产生一系列的WM_KEYDOWN和WM_SYSKEYDOWN消息,在用户释放这个键时.才产生一条WM_KEYUP和WM_SYSKEYUP消息。系统和非系统击键消息windows对系统击键和非系统击键有个划分,系统击键产生系统击键消息:W
7、M_SYSKEYDOWN和WM_SYSKEYUP。非系统击键产生非系统消息:WM_KEYDOWN和WM_KEYUP。如果窗口过程必须处理系统击键消息,那么就必须确保在处理了这条消息后,还得把它传给函数DefWindowProc。否则,所有的系统操作包括alt键将被禁止,即使在窗口有键盘焦点的情况下也一样,就是说,用户不能得到窗口菜单或系统菜单.或者用从ALT+ESCorALT+TAB组合键来激活另一个窗口。系统击键消息主要用于windows系统而不是应用程序,windows系统用它们来给菜单提供内部键盘接口,以
8、便用户控制要激活哪一个窗口。系统击键消息是在用户使用一个从ALT组合键时,或者是用户击键,但没有窗口具有键盘焦点(例如,活动应用程序窗口被最小化时),在这种情况下,消息就被邮递到与活动窗口相应的消息队列中。非系统击键消息是用1:应用程序窗口,函数DefWindowProc在这里则没有什么用,窗口过程丢弃任何它不感兴趣的非系统击键消息。虚键码击键消息的wParam参数含有一个被按过或被释
此文档下载收益归作者所有