如何在directx中获取输入设备

时间:2014-10-24 11:18:10

标签: c++ directx-9

我正在通过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

0 个答案:

没有答案