DxInput的使用

今天搞了一天的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对数据进行检索。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值