我正在通过Frank Luna的9.0c书学习DirectX,而且我在获取鼠标和键盘时遇到了一些麻烦。
这是由Frank Luna处理初始化的函数:
DirectInput::DirectInput(DWORD keyboardCoopFlags, DWORD mouseCoopFlags)
{
ZeroMemory(mKeyboardState, sizeof(mKeyboardState));
ZeroMemory(&mMouseState, sizeof(mMouseState));
HR(DirectInput8Create(gd3dApp->getAppInst(), DIRECTINPUT_VERSION,
IID_IDirectInput8, (void**)&mDInput, 0));
HR(mDInput->CreateDevice(GUID_SysKeyboard, &mKeyboard, 0));
HR(mKeyboard->SetDataFormat(&c_dfDIKeyboard));
HR(mKeyboard->SetCooperativeLevel(gd3dApp->getMainWnd(), keyboardCoopFlags));
-> HR(mKeyboard->Acquire());
HR(mDInput->CreateDevice(GUID_SysMouse, &mMouse, 0));
HR(mMouse->SetDataFormat(&c_dfDIMouse2));
HR(mMouse->SetCooperativeLevel(gd3dApp->getMainWnd(), mouseCoopFlags));
HR(mMouse->Acquire());
}
创建一个实例,如下所示:
DirectInput di(DISCL_NONEXCLUSIVE|DISCL_FOREGROUND,DISCL_NONEXCLUSIVE|DISCL_FOREGROUND);
HR是一个在发生错误时调用DTrace的宏,因此您可以假设它什么都不做。 除了一种情况之外,大多数情况下都可以正常工作:当我在启动应用程序时单击其他窗口时,它会在创建鼠标设备时崩溃。我指出了问题发生的地方。
如何修改此功能以使其不会崩溃?
编辑:当我删除" - >获取()"上的宏时,它看起来并没有崩溃线。我相信宏对错误过于敏感,所以是的:D