DxInput的使用

来源:互联网 发布:淘宝steam充值 编辑:程序博客网 时间:2024/06/16 16:55

今天搞了一天的DxInput,晚上总结下:

1.创建DirectInput8对象。DirectInput8Create(

 HINSTANCE hinst,    DWORD dwVersion,    REFIID riidltf,    LPVOID *ppvOut,    LPUNKNOWN punkOuter
);

LPDIRECTINPUT8 lpi;HRESULT hr;//创建directinput8对象hr = DirectInput8Create(hInstance, DIRECTINPUT_VERSION, IID_IDirectInput8, (void**)&lpi, NULL);if (FAILED(hr)){return FALSE;}

2.创建DirectInput设备。

hr = lpi->CreateDevice(GUID_SysKeyboard, &m_keyboard, NULL);if (FAILED(hr)){return FALSE;}
其中m_keyboard为LPDIRECTINPUTDEVICE8;
3.设置设备的数据格式

hr = m_keyboard->SetDataFormat(&c_dfDIKeyboard);if (FAILED(hr)){return FALSE;}

这里面的参数是一个结构体,一般采用预定义的全局变量。

4.设置协作等级

hr = m_keyboard->SetCooperativeLevel(hwnd, DISCL_EXCLUSIVE | DISCL_FOREGROUND);if (hr == DIERR_UNSUPPORTED){MessageBox(hwnd, _T("不支持设置的协作等级"), _T("erro"), 0);return FALSE;}if (FAILED(hr)){MessageBox(hwnd, _T("设置协作等级失败"), _T("erro"), 0);return FALSE;}

本来我是想把它设为后台独占模式,但是我电脑不支持,所以只好把它设为前台模式了。

5.设置缓冲区

DIPROPDWORD dip;dip.diph.dwSize = sizeof(DIPROPDWORD);dip.diph.dwHeaderSize = sizeof(DIPROPHEADER);dip.diph.dwObj = 0;dip.diph.dwHow = DIPH_DEVICE;dip.dwData = 16;hr = m_keyboard->SetProperty(DIPROP_BUFFERSIZE, &dip.diph);if (FAILED(hr)){return FALSE;}

6.获取设备访问权

m_keyboard->Acquire();

然后就只需用GetDeviceState对数据进行检索。

原创粉丝点击