这是一个DirectInput使用出现了一个小问题 directx高手 请进来指点江山

在使用DirectInput创建键盘设备时,设置协作标志为DISCL_FOREGROUND|DISCL_EXCLUSIVE或DISCL_FOREGROUND|DISCL_NONEXCLUSIVE等组合会导致执行错误。程序能够通过编译,但在运行时返回错误。问题出现在`SetCooperativeLevel`函数,当设置为DISCL_NONEXCLUSIVE|DISCL_BACKGROUND时可以成功。目前尚不清楚为何其他组合会导致错误,需要进一步调试和研究DirectInput的文档以找出解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 这是一个DirectInput使用出现了一个小问题
具体问题如下:
设置DInput的协作标志时 如
result=pDKB->SetCooperativeLevel(hwnd,DISCL_NONEXCLUSIVE|DISCL_FOREGROUND);
这里的协作标志设置 只有DISCL_NONEXCLUSIVE|DISCL_BACKGROUND
能执行成功,而设置成其他标识就会返回错误!如DISCL_FOREGROUND| DISCL_EXCLUSIVE,DISCL_FOREGROUND|DISCL_NONEXCLUSIVE等!

 

程序编译会通过,就执行时,就返回错误!这个程序已经调试许多遍了
就是找不到原因!
具体部分代码 如下:
result=DirectInput8Create(hInstance,DIRECTINPUT_VERSION,IID_IDirectInput8,(void**)&pDI,NULL)

result=pDI->CreateDevice(GUID_SysKeyboard,&pDKB,NULL);
if (FAILED(result))
{
dInMessageBox("创建键盘设备失败!");
return FALSE;
}

result=pDKB->SetCooperativeLevel(hwnd,DISCL_NONEXCLUSIVE|DISCL_FOREGROUND);/出问题的
if (FAILED(result))
{
dInMessageBox("设置键盘的协作等级失败!");
return FALSE;
}
result=pDKB->SetDataFormat(&c_dfDIKeyboard);
if (FAILED(result))
{
dInMessageBox("设置键盘数据格式失败!");
return FALSE;
}
result=pDKB->Acquire();
if (FAILED(result))
{
dInMessageBox("获取设备输入失败!");
return FALSE;
}
//消息循环中的
while()
{
result=pDKB->GetDeviceState(sizeof(buffer), (LPVOID)&buffer);
if (result!=DI_OK)
{
dInMessageBox("取得键盘状态失败!");
}

if(FAILED(result))
{
/丢失了键盘设备,重新获取
result=pDKB->Acquire();
while(result==DIERR_INPUTLOST)
{
result=pDKB->Acquire();
}
}
if(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
if(msg.message==WM_QUIT)
break;
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
问题补充:
这个程序是没有语法错误,我把标识设置成DISCL_NONEXCLUSIVE|DISCL_BACKGROUND程序执行就成功了
而设置成其他标识组合就会返回错误,而Directx书里没有提到
设置成其他标识组合时,要做其他代码改变!为什么执行会出现错误!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值