在ExampleFrameListerner文件中添加如下代码:
//初始化ois的参数列表
OIS::ParamList pl;
size_t windowHnd = 0;
std::ostringstream windowHndStr;
win->getCustomAttribute("WINDOW", &windowHnd);
windowHndStr << windowHnd;
pl.insert(std::make_pair(std::string("WINDOW"), windowHndStr.str()));
//增加ois对win32鼠标的处理
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")));
同时在MouseMoved函数中添加如下代码:
if(arg.state.X.abs<mWindow->getViewport(0)->getActualLeft()+2
||(arg.state.Y.abs<mWindow->getViewport(0)->getActualTop()+0.5)
||(arg.state.X.abs>(mWindow->getViewport(0)->getActualLeft()+mWindow->getViewport(0)->getActualWidth()-2))
||(arg.state.Y.abs>(mWindow->getViewport(0)->getActualTop()+mWindow->getViewport(0)->getActualHeight()-2))) //判断当前鼠标的位置是否超出Ogre的窗口。
{
CEGUI::MouseCursor::getSingleton().hide();
}
else
{
CEGUI::MouseCursor::getSingleton().show();
ShowCursor(0); //隐藏系统鼠标
}