本节主要介绍Microsoft DirectInput的底层结构以及它与Microsoft Windows消息系统的关系。
DirectInput对象
与Windows交互
关于DirectInput实现的实战信息,可参照“使用DirectInput”。
DirectInput对象
一个专用于输入的DirectInput的实现由DirectInput对象(它支持IDirectInput8 COM接口)和一个DirectInputDevice对象(为每个输入设备提供数据)组成。每个DirectInputDevice对象依次包含设备对象(device objects),它们是单独的控制器或转换器,如按键、按钮或者轴。设备对象在这里也被称为设备对象实例(device object instances)。
每个DirectInputDevice对象代表一个输入设备,如鼠标、键盘或手柄。在DirectInput的API中,手柄(joystick)是指任意不同于鼠标或键盘的设备。一个硬件其实是不同类型的输入设备的组合,如带触摸板的键盘,可以表示成两个或两个以上的DirectInputDevice对象。强力回馈设备可以通过一个单独的包含输入输出的游戏杆表示。
DirectInputDevice对象是实现IDirectInputDevice8接口的实例。应用程序可以通过IDirectInputDevice8::EnumObjects方法确定可用设备对象的数量和类型。个别的设备对象没有包装成代码对象,但在DIDEVICEOBJECTINSTANCE结构中有描述。
所有的DirectInput接口都包含在ANSI及Unicode的版本中,编译时,如果已经定义了UNICODE,就会使用UNICODE版本。
与Windows交互
由于DirectInput直接与设备驱动进行交互,所以它既可以抑制也可以忽略Windows的鼠标及键盘消息。同样也可以忽略控制面板中键盘及鼠标的设置。尽管如此,它还是会使用游戏杆或其他游戏控制器的标准设置。
DirectInput不识别键盘的“字符重复”的设置。当使用缓冲数据的时候,DirectInput会把每一次的按下与释放看作一个单独的事件,而且不产生字符重复的序列。当使用立即数据的时候,DirectInput就只会关心当前按键的物理状态,而不是Windows所解释出的键盘事件。
DirectInput不实现字符转换或变换。例如,SHIFT键与其他键将同等对待,而不是另外一个按键的修饰符。不管用户的系统语言设置是什么,按键总会返回相同的标识。
Windows 2000中,, 以独占模式获得键盘的话,将阻止其他后续的应用程序接收键盘数据。
由于DirectInput直接访问鼠标驱动,因此它将绕过Windows鼠标数据解释子系统。依靠鼠标光标导航的应用程序应该继续使用标准的Windows鼠标消息及Microsoft Win32函数。
当在独占模式下使用系统鼠标时,DirectInput会抑制鼠标消息,因此Windows将不能显示标准的鼠标图标。
DirectInput会忽略控制面板中的设置,如加速、按钮交换。但DirectInput会自行识别驱动中的设置。例如,如果用户有一个三键鼠标,并使用驱动实用工具把中键设置为双击的快捷方式,DirectInput就会在中键单击时报告为两次主键的单击。
2005年11月9日译, 不得用于商业用途。
outiejun@yeah.net
Understanding DirectInput - Microsoft DirectX 9.0 SDK Update (October 2005)
posted on 2005-11-09 19:28
outiejun 阅读(1804)
评论(0) 编辑 收藏 引用 所属分类:
DirectX9翻译-DirectInput