首    页 界面/窗口 网络/通讯 数据库 组件开发 图像/多媒体 NET/Web 其它技术 源码下载 资料下载 软件共享 软件外包 曲艺杂谈
栏目导航:  首    页  |  其它技术  |  文件/系统   


关于按键讯息


原作者:施昌权    源出处:卓为VC    发布者:施昌权    发布类型:原创    发布日期:2008-08-31

        

  当您按下一个键时,Windows把WM_KEYDOWN或者WM_SYSKEYDOWN讯息放入有输入焦点的视窗的讯息伫列;当您释放一个键时,Windows把WM_KEYUP或者WM_SYSKEYUP讯息放入讯息伫列中。
  非系统键: WM_KEYDOWN(键按下)      WM_KEYUP(键释放)    
  系统键  : WM_SYSKEYDOWN(键按下)   WM_SYSKEYUP(键释放)    
  通常「down(按下)」和「up(放开)」讯息是成对出现的。不过,如果您按住一个键使得自动重复功能生效,那么当该键最后被释放时,Windows会给视窗讯息处理程式发送一系列WM_KEYDOWN(或者WM_SYSKEYDOWN)讯息和一个WM_KEYUP(或者WM_SYSKEYUP)讯息。像所有放入伫列的讯息一样,按键讯息也有时间资讯。通过呼叫GetMessageTime,您可以获得按下或者释放键的相对时间。    
  系统按键与非系统按键   
  WM_SYSKEYDOWN和WM_SYSKEYUP中的「SYS」代表「系统」,它表示该按键对Windows比对Windows应用程式更加重要。WM_SYSKEYDOWN和WM_SYSKEYUP讯息经常由与Alt相组合的按键产生,这些按键启动程式功能表或者系统功能表上的选项,或者用於切换活动视窗等系统功能(Alt-Tab或者Alt-Esc),也可以用作系统功能表加速键(Alt键与一个功能键相结合,例如Alt-F4用於关闭应用程式)。程式通常忽略WM_SYSKEYUP和WM_SYSKEYDOWN讯息,并将它们传送到DefWindowProc。由於Windows要处理所有Alt键的功能,所以您无需拦截这些讯息。您的视窗讯息处理程式将最後收到关於这些按键结果(如功能表选择)的其他讯息。如果您想在自己的视窗讯息处理程式中加上拦截系统按键的程式码(如本章後面的KEYVIEW1和KEYVIEW2程式所作的那样),那么在处理这些讯息之後再传送到DefWindowProc,Windows就仍然可以将它们用於通常的目的。  
  但是,请再考虑一下,几乎所有会影响使用者程式视窗的讯息都会先通过使用者视窗讯息处理程式。只有使用者把讯息传送到DefWindowProc,Windows才会对讯息进行处理。例如,如果您将下面几行叙述:     
  case WM_SYSKEYDOWN:  
  case WM_SYSKEYUP:  
  case WM_SYSCHAR:  
    return 0;  
  加入到一个视窗讯息处理程式中,那么当您的程式主视窗拥有输入焦点时,就可以有效地阻止所有Alt键操作(我将在本章的後面讨论WM_SYSCHAR),其中包括Alt-Tab、Alt-Esc以及功能表操作。  
  WM_KEYDOWN和WM_KEYUP讯息通常是在按下或者释放不带Alt键的键时产生的,您的程式可以使用或者忽略这些讯息,Windows本身并不处理这些讯息。  
  对所有四类按键讯息,wParam是虚拟键代码,表示按下或释放的键,而lParam则包含属於按键的其他资料。下面是MSDN中的介绍:    
  lParam    
  Specifies the repeat count, scan code, extended-key flag, context code, previous key-state flag, and transition-state flag, as shown in the following table.  
  Bit Description    
  0–15 Specifies the repeat count for the current message. The value is the number of times the keystroke is autorepeated as a result of the user holding down the key. If the keystroke is held long enough, multiple messages are sent. However, the repeat count is not cumulative.    
  16–23 Specifies the scan code. The value depends on the original equipment manufacturer (OEM).    
  24 Specifies whether the key is an extended key, such as the right-hand ALT and CTRL keys that appear on an enhanced 101 or 102 key keyboard. The value is 1 if it is an extended key; otherwise, it is 0.    
  25–28 Reserved; do not use.    
  29 Specifies the context code. The value is always 0 for a WM_KEYDOWN message.    
  30 Specifies the previous key state. The value is 1 if the key is down before the message is sent, or it is zero if the key is up.    
  31 Specifies the transition state. The value is always zero for a WM_KEYDOWN message. 

 

 

关于我们 版权声明 广告服务 联系我们 友情链接 加入收藏
站长:施昌权    Email:scq2099yt@163.com    MSN:scq2099yt@live.cn    QQ:14046300    本站QQ群:67202409
Copyright © 2008     卓为VC(www.joyvc.cn)    All Rights Reserved    建议分辨率 1024×768
本站由施昌权制作维护
京ICP备09012297号