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

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

  所以如果你不声明版本的话,会给出你一个warning警告,不过也没什么关系,因为你确定使用的8.0的版本而不是其他版本,除非你需要使用其他版本,那么你才需要注意这点。

  下面开始把我们的新的类逐渐补充完整。在public下,声明如下的成员变量:

  //一般的成员变量

  HINSTANCE m_hInstance; // 实例句柄

  HWND m_hWnd; // 窗口句柄

  LPDIRECTINPUT8 m_lpDI; // DI8接口指针

  LPDIRECTINPUTDEVICE8 m_lpDIDevice; // DIDevice8接口指针

  DIJOYSTATE m_diJs; //存储Joystick状态信息

  GUID JoystickGUID; //GUID


  这些变量的意义都说明的很清楚,后面我们用到的时候,我会更加详细的说明每个变量的使用。下面我们也声明所需要用到的一些基本的成员函数,如下:

  //成员函数

  bool Initialise(void); //初始化函数

  //枚举设备

  static BOOL CALLBACK DIEnumDevicesCallback(const DIDEVICEINSTANCE* lpddi, VOID* pvRef); //枚举对象

  static BOOL CALLBACK EnumObjectsCallback( const DIDEVICEOBJECTINSTANCE* pdidoi, VOID* pContext );

  HRESULT PollDevice(void); // 轮循设备函数,在轮循过程中读取设备状态


  同样以后我们也会慢慢用到这些函数,到时候再详细的讲解他们的使用。这里强调的是这些都是一些基本的成员函数,你完全可以根据自己的应用添加其他的内容,只要你理解了DirectInput是如何工作的。

  先来看看构造和析构函数的定义:

Joystick::Joystick(void)

{

m_lpDIDevice = NULL;

m_lpDI = NULL;

m_hWnd = NULL;

m_hInstance = GetModuleHandle(NULL) ; //获取实例句柄

}


Joystick::~Joystick(void)

{

if(m_lpDIDevice)

m_lpDIDevice->Unacquire();

//释放DI和DIDevice对象

if(m_lpDIDevice)

{

m_lpDIDevice->Release();

m_lpDIDevice = NULL;

}

if(m_lpDI)

{

m_lpDI->Release();

m_lpDI = NULL;

}

}


  需要说明的是析构函数。输入设备的使用是需要获取的,当进行一系列的设置以后,应该使用IDirectInputDevice8::Acquire()来获取设备或者重获取设备(Acquire)。当不再需要设备了,则应该先归还(Unacquire)设备,然后再释放设备接口,最后再释放IDirectInput8接口。取消设备的获取,使用IDirectInputDevice8::Unacquire ()成员函数,释放设备接口资源使用IDirectInputDevice8::Release()成员函数,释放IDirectInput8接口,使用IDirectInput8::Release()成员函数。另外需要注意的是,在归还设备前进行释放,将是破坏性的,所以一定要先归还,再释放。
键盘也能翻页,试试“← →”键

相关文章

关注我们

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