|
我写了一个初始化DirectInput的函数放在类里面
可是运行产生很多错误,
首先就是m_Keyboard->Acquire()一直返回E_ACCESSDENIED
把m_Keyboard->Acquire()注释掉之后
m_Mouse->SetCooperativeLevel(m_hWnd, flags) 也发生问题
返回E_INVALIDARG
这几个宏定义的意思在SDK帮助文档里面也找不到,有没有高手帮我看看,谢谢了
bool CDirectInput::Initialize(HWND hWnd, HINSTANCE hInstance, bool mouseExclusive /* = false */)
{
m_hWnd = hWnd;
gThis = this;
// 创建输入系统
if (FAILED(DirectInput8Create(hInstance, DIRECTINPUT_VERSION,
IID_IDirectInput8, (void **)&m_Input, NULL)))
{
return false;
}
// 初始化键盘
if (FAILED(m_Input->CreateDevice(GUID_SysKeyboard, &m_Keyboard, NULL)))
return false;
if (FAILED(m_Keyboard->SetDataFormat(&c_dfDIKeyboard)))
return false;
if (FAILED(m_Keyboard->SetCooperativeLevel(m_hWnd,
DISCL_FOREGROUND | DISCL_NONEXCLUSIVE)))
{
return false;
}
// 出错处1!!!!!!!!!!!!!
//HRESULT hr;
//hr = m_Keyboard->Acquire();
if (FAILED(m_Keyboard->Acquire()))
{
MessageBox(m_hWnd, "无法获取键盘", "!!!", MB_OK);
return false;
}
memset(m_Keys, 0, sizeof(m_Keys));
// 初始化鼠标
DWORD flags;
if (FAILED(m_Input->CreateDevice(GUID_SysMouse, &m_Mouse, NULL)))
return false;
if (FAILED(m_Mouse->SetDataFormat(&c_dfDIMouse)))
return false;
if (mouseExclusive)
flags = DISCL_FOREGROUND | DISCL_EXCLUSIVE | DISCL_NOWINKEY;
else
flags = DISCL_FOREGROUND | DISCL_NOWINKEY;
// 出错处2!!!!!!
//hr = m_Mouse->SetCooperativeLevel(m_hWnd, flags);
if (FAILED(m_Mouse->SetCooperativeLevel(m_hWnd, flags)))
return false;
//m_Mouse->Acquire();
if (FAILED(m_Mouse->Acquire()))
{
MessageBox(m_hWnd, "无法获取鼠标", "!!!", MB_OK);
return false;
}
return true;
} |
|