这是一个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书里没有提到
设置成其他标识组合时,要做其他代码改变!为什么执行会出现错误!