正在阅读:MFC下DirectX DirectInput的实现MFC下DirectX DirectInput的实现

2005-07-27 10:07 出处: 作者:苗苗 责任编辑:moningfeng

  首先介绍协作等级。设置协作等级函数原型为:

HRESULT SetCooperativeLevel(

HWND hwnd , //窗口句柄

DWORD dwFlags //协作标志

);


  对于协作标志,主要有以下一些选择:

  DISCL_BACKGROUND 后台模式:应用程序在前台和后台都能够使用DirectInput设备

  DISCL_FOREGROUND 前台模式:应用程序要求前台访问。如果应用程序转到后台,那么应用程序将失去对DirectInput设备的控制

  DISCL_EXCLUSIVE 独占模式:应用程序获得设备,则其他的程序将不能对其申请独占访问。但可以申请非独占访问。

  DISCL_NONEXCLUSIVE 非独占模式:应用程序请求非独占访问设备。

  前台协作等级表明只有应用程序在前台,或者换句话说,只有获得了输入的焦点,那么程序才能读取数据。如果程序到了后台,那么设备自动的丢失,或者不可用。

  后台协作等级表明无论在前台还是后台,程序都可以在任何时候读取数据,获得输入。

  独占模式防止其他的程序独占设备。事实上,如果你的程序使用了独占模式占用设备,并不表示其他的程序不能从设备读取数据。当一个程序独占了键盘的输入,DirectInput将禁止包括Windows键在内的所有的键盘消息,除了CTRL+ALT+DEL 和 ALT+TAB 这两种键盘消息。

  非独占模式表明其他的应用程序可以独占或非独占的获得设备。Windows键消息仍被禁止,以防止用户不小心跳出程序。

  上面的例子中我们选择了前台独占模式,所以将DISCL_FOREGROUND|DISCL_EXCLUSIVE作为dwFlags参数的值。

  接下来我们需要设置设备的数据格式。

//设置数据格式

hr = m_lpDIDevice->SetDataFormat( &c_dfDIJoystick);

if FAILED(hr)

{

OutputDebugString("设置数据格式失败 - in CDIJoystick::Initialise\n");

return false;

}


  设置数据格式需要调用IDIRECTINPUTDEVICE8::SetDataFormat()来完成。设置数据格式的函数原型为HRESULT SetDataFormat(LPCDIDATAFORMAT lpdf);

  lpdf是指向数据格式结构的指针。关于数据格式结构DIDATAFORMAT,这里不详细介绍了,可以参考SDK。DirectInput为我们设置了几种常规的数据格式,我们可以简单的利用它们来完成数据格式的设置。

  c_dfDIMouse 通用鼠标

  c_dfDIMouse2 通用鼠标2,在7.0以上版本使用

  c_dfDIKeyboard 通用键盘

  c_dfDIJoystick 通用游戏杆

  c_dfDIJoystick2 通用游戏杆2,一般指力反馈设备


  这里我们需要使用普通的游戏手柄,所以把c_dfDIJoystick的地址作为参数传递过去。

  对于游戏手柄,我们还要设置它的输入特性。这里首先要对游戏手柄类型做一个简单的说明。前面我们并没有具体的区分游戏手柄和游戏杆,其实他们是有区别的。游戏手柄指我们常见的那种PS手柄,它的方向键也是一些电平开关。而游戏杆是摇杆式的手柄,属于一个模拟设备,在移动方向杆的时候输出的是一系列连续的值。如果你使用的是游戏手柄的话,因为它的方向仅仅是一些电平开关,那么读取它们的数据,你很容易就识别按键。如果使用的是游戏杆的话,那么读取出的连续的值到底表示什么意思,你必须提前设定。比如你可以设定X轴范围为-1024~+1024,Y轴范围为-128~+128,一切取决于你自己的意愿。
键盘也能翻页,试试“← →”键

相关文章

关注我们

最新资讯离线随时看 聊天吐槽赢奖品