WM_APPCOMMAND和增强输入设备

有些文章拷贝过来上传不了,不知道怎么回是,先给大家这些吧,以后再说!

这篇虽然比较老,但总有人需要吧,我想,呵呵!要么就当占用大家的磁盘空间了
WM_APPCOMMAND和增强输入设备
1.0 简介
    为创建一个良好的用户记录,硬件供应商现在对打开和控制软件程式的标准输入设备(如键盘和鼠标)增加了附加的按键和按钮。这些附加输入途径可以打开程式、控制音频和媒体程式以及打开和控制互联网浏览器。在Windows 2000发布前,Windows操作系统要求硬件制造商为这些增强功升级硬件标准。
Windows 2000操作系统Bata 3版,以名为WM_APPCOMMAND的新Windows API形式,为15种新的多媒体事件提供本地支持。当这些新的多媒体事件发生时,这个新定义的消息用焦点通知程式。
2.0 本地操作系统上的WM_APPCOMMAND_Enabled程式
Windows 2000 Bata 3中引入的WM_APPCOMMAND API消息,为程式定义了接收增强按键事件通知的直接方式。而后,程式可以初始化任何与特定键事件相连的预定义功能。例如,一个MDI程式可以使用BACKWARD(后退)和FORWARD(前进)事件来循环文档视窗。加入一个WM_APPCOMMAND句柄可以使程式用新增加的键盘、鼠标及其它支持此扩展功能的新HID设备来工作。当按下一个被支持的键或按钮,一系列的事件发生并导致WM_APPCOMMAND消息送往输入焦点视窗。若该视窗不处理WM_APPCOMMAND消息,操作系统将此消息“冒泡”到视窗的父视窗,如此再三直至顶级视窗。如果任一视窗处理消息并返回TRUE,则此过程结束。如果顶级视窗不处理消息,则WM_APPCOMMAND消息被送往外壳钩子(Sheel  hook)。
2.1 使用DefwindowProc来进行消息清除
WM_APPCOMMAND系列依靠可以适当处理不用的Windows消息的程序。开发者应当不断向DefWindowProc传递不用的键盘、鼠标和WM_APPCOMMAND消息。不用此方式清除无用的消息会中断WM_APPCOMMAND系列。
2.2 WM_APPCOMMAND对虚拟键码的处理
对大多数编程者,处理键盘按键事件最自然的方式是通过使用WM_KEYDOWN和WM_KEYUP消息传送的虚拟键码(VKs),为了支持新的多媒体键盘键和鼠标按钮,这里极力建议不要使用VKs。这样做有两个原因。首先,使用WM_APPCOMMAND,需要建立能产生此消息(如:键盘和鼠标)的所有HID设备支持。由于所有类型的增强设备的进一步支持添加于Windows 2000,因此将会有不产生VKs而是WM_APPCOMMAND的升级设备列表,;第二,WM_KEYDOWN或WM_KEYUP消息用输入焦点送往视窗,且不会”冒泡”到父视窗。这就造成控件“吃掉”这些键消息,并会中断WM_APPCOMMAND系列。
 
图1 Windows 2000中的WM_APPCOMMAND
3.0 故障诊断
问题1:WM_APPCOMMAND-enabled程序,不响应WM_APPCOMMAND消息
可能原因1:没有返回正确的返回值。
    在进程的每一阶段返回正确的值是非常重要的。当一个WM_KEYDOWN消息被处理时,返回值应为FALSE(或0)。当处理WM_XBUTTON或WM_APPCOMMAND消息时,返回值应为TRUE(或1)。图1提供详细信息,附录A提供例程。
可能原因2:没有为DefWindowProc提供未处理的消息。
当程序中加入WM_APPCOMMAND支持时,即给DefWindowProc传送未处理的消息,而不是调用DefWindowProc进行消息清除,会产生常见的错误。在Windows 2000中,当知道虚拟键码或有Xbutton消息到达时,由DefWindowProc产生WM_APPCOMMAND消息。图1提供详细信息,附录A提供例程。
可能原因3:控件“吃掉”消息。
注意:WM_KEYDOWN消息由焦点送往视窗而不是前台视窗,并不会“冒泡”至父视窗。这就意味着,按钮和其它控件可以接收这些消息,并能“吃掉”它们。在所有程序消息处理机制中,使用DefWindowProc进行消息清除很重要。图1提供详细信息,附录A提供例程。
4.0 WM_APPCOMMAND需求
在Windows 2000中,使用微软IntelliType Pro 1.0 或 IntelliPoint 3.0 软件来增强本地 WM_APPCOMMAND 支持,IntelliType Pro 和 IntelliPoint 在传统微软操作系统上模仿了增强WM_APPCOMMAND 支持。
用 Microsoft IntelliType Pro:
Windows 2000: 1.0增强版支持Beta 3;. 1.1 增强版支持Windows 2000.最终发行版
Windows NT4.0: 由IntelliType Pro 1.0+.提供支持Service Pack 3 及后续版本支持。
Windows 95/98: 由IntelliType Pro 1.0+.提供支持。
Windows CE: 不支持。
用 Microsoft IntelliPoint:
Windows 2000: 3.0增强 版支持Beta 3; 3.01 增强版支持Windows 2000.最终发行版。
Windows NT4.0: 由IntelliPoint 3.0+提供Service Pack 3 及后续版本支持。
Windows 95/98: 由IntelliPoint 3.0+提供支持.
Windows CE:不支持。
5.0 WM_APPCOMMAND特性
参见
6.0 如何处理WM_APPCOMMAND消息
程式处理此消息的方式如同处理菜单或工具栏命令。例如:菜单命令可在视窗程序中被如下处理:
case WM_COMMAND:
      switch (wParam)
      {
      case IDC_PLAYPAUSE:
OnPlayPause(hwnd);
         return FALSE;

      case IDC_STOP:
         OnStop(hwnd);
         return FALSE;

      case IDC_PREV:
         OnPrev(hwnd);
         return FALSE;

      case IDC_NEXT:
         OnNext(hwnd);
         return FALSE;
     
[other commands…]
}
[…]

   return DefWindowProc(hwnd, message, wParam, lParam);
键盘命令处理方式与此类似。但有一个重要的不同是:若消息被处理,WM_APPCOMMAND处理程序须返回1,而不是常见返回值0。给DefWindowProc()传递不用的代码也很重要。于是,别的程序可有机会处理它们。
 case WM_

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值