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

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

  下面要说明的是一个数据结构DIDEVICEINSTANCE,它的Unicode下5.0以上版本的定义如下:

  typedef struct DIDEVICEINSTANCEW {

  DWORD dwSize; //结构大小

  GUID guidInstance; //设备的GUID实例,这个是我们所需要的

  GUID guidProduct; //设备产品的GUID

  DWORD dwDevType; //扫描的设备类型,和枚举函数中定义的一样

  WCHAR tszInstanceName[MAX_PATH]; //实例名称字符串

  WCHAR tszProductName[MAX_PATH]; //产品名称字符串

  GUID guidFFDriver; //力反馈驱动GUID

  WORD wUsagePage; //高级参数

  WORD wUsage; //高级参数

  } DIDEVICEINSTANCEW, *LPDIDEVICEINSTANCEW;


  这里最主要的就是guidInstance了,它是你创建设备所必须的。

  接下来是VOID* pvRef,它是一个32位指针,你可以通过它把所进行的操作保存下来。上面的例子中,在枚举函数里传递了JoystickGUID的地址到回调函数中,然后在回调函数中把扫描到的设备的GUID保存下来。 *(GUID*) pvRef = lpddi->guidInstance;

  这个语句首先把pvRef转换为(GUID*)类型,然后使用*来赋值。

  对于回调函数如何执行下面的操作,有两种方式:

  #define DIENUM_STOP 0 //扫描后停止

  #define DIENUM_CONTINUE 1 //扫描后继续


  以上是枚举函数和回调函数的一些基本内容,当然你可以加入更多自己的操作在回调函数里面。

  上面的例子中,我们枚举一个设备以后,在回调函数中保存了设备的GUID,然后立刻停止继续枚举扫描,来简单的实现我们的功能,当然如果你有很多的设备的话,你可以依次扫描每一个设备,保存他们每一个的GUID。

  枚举和回调完成以后,就可以创建设备了。

//创建DI8设备

if(!m_lpDIDevice)

{

hr = m_lpDI->CreateDevice(JoystickGUID,&m_lpDIDevice,NULL);

if FAILED(hr)

{

OutputDebugString("创建设备失败 - in CDIJoystick::Initialise\n");

return false;

}

}


  创建设备是不是很简单,只要使用LPDIRECTINPUT8接口的CreateDevice成员函数就可以完成。参数也很简单,第一个为设备的GUID,就是枚举和回调中所保存的那个GUID,第二个为设备接口的地址,来保存设备的接口,第三个参数为系统保留,一般使用NULL。

  接下来要进行一些设备的必要的设置,包括协作等级、数据格式以及游戏手柄特有的输入特性方面的设置。

//设置协作等级—— 前台模式 | 独占模式

hr = m_lpDIDevice ->SetCooperativeLevel(m_hWnd,DISCL_FOREGROUND|DISCL_EXCLUSIVE);

if FAILED(hr)

{

OutputDebugString("设置协作等级失败 - in CDIJoystick::Initialise\n");

return false;

}

键盘也能翻页,试试“← →”键

相关文章

关注我们

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