|
我依照网上材料所说把顶层窗口传进去了,但是发现还是不能监听,代码如下, 其中注释掉的不知道是否有影响,鼠标的mousePressed 事件响应有问题,相应一次后就一直都响应,不听控制了
//键鼠事件
// 获得输入系统
size_t windowHnd = 0;
std: stringstream windowHndStr;
OIS: aramList pl;
//获得渲染窗口数据
//this->m_pMainWindow->getCustomAttribute("WINDOW", &windowHnd);
windowHnd = (size_t )AfxGetMainWnd()->GetActiveWindow()->GetSafeHwnd(); // 这里这个窗口句柄就是我们传入的MFC主窗口
//windowHnd = (size_t )(((CFrameWnd*)(AfxGetApp()->m_pMainWnd))->GetActiveView()->m_hWnd); // 这里这个窗口句柄就是我们传入的MFC主窗口
//windowHnd = (size_t) this->m_pParent->m_hWnd; //父窗口句柄
windowHndStr << windowHnd;
// OIS的窗口必须要顶层窗口,所以只有传MFC的主窗口给他,传view就不行
pl.insert(std::make_pair(std::string("WINDOW"), windowHndStr.str()));
// 设置鼠标显示和非游戏独占,这样鼠标可以显示在屏幕上并可以移动到窗口外
pl.insert(std::make_pair(std::string("w32_mouse"), std::string("DISCL_FOREGROUND" )));
pl.insert(std::make_pair(std::string("w32_mouse"), std::string("DISCL_NONEXCLUSIVE")));
// 键盘非游戏独占,这里我设置成为OGRE独占键盘事件
//pl.insert(std::make_pair(std::string("w32_keyboard"), std::string("DISCL_FOREGROUND")));
//pl.insert(std::make_pair(std::string("w32_keyboard"), std::string("DISCL_NONEXCLUSIVE")));
this->m_pInputManager = InputManager::createInputSystem(pl);
// 这样InputManager就建好了,但为了从键盘、鼠标、或是手柄中获得输入,你还必须创建这些对象:
try
{
this->m_pKeyboard = static_cast<Keyboard*>(this->m_pInputManager->createInputObject(OISKeyboard, true)); //有缓冲的键盘输入
this->m_pMouse = static_cast<Mouse*>(this->m_pInputManager->createInputObject(OISMouse, true)); //有缓冲的鼠标输入
//mJoy = static_cast<OIS::JoyStick*>(mInputManager->createInputObject(OIS::OISJoyStick, false)); //手柄
//this->m_pKeyboard->setEventCallback(this); //键盘回调
this->m_pMouse->setEventCallback(this);
//**************************************************************//
if (!this->m_bRead)
goto exit ;
if (arg.state.buttonDown(MB_Right))
{
MessageBox(0,"鼠标事件","",0); //
}
exit:
return true; |
|