GameRes游戏开发资源网
开发论坛 | 游戏人才 | 外挂技术
注册GameRes用户 登录 找回密码 |  精华区索引 | 新帖快速索引 | 本版精华区欢迎访问本论坛!

GameRes游戏开发论坛 » OGRE引擎交流 » OGRE放到mfc里面捕捉不到鼠标?

本主题共有8张帖子, 被点击4263 发表新主题发表回复发布新投票
神秘的猫
Exp:286

下士
 发表于: 2007-6-7 22:54:00

OGRE放到mfc里面捕捉不到鼠标?

OIS总是获取设备失败,然后我就把mfc的鼠标键盘消息截获了再发给OGRE窗口

新问题是,OGRE里面的鼠标光标位置和真实的光标位置不一样!就是有2个光标..咋办?

 注册: 2005-4    状态: Offline 1   Top
Leeman
Exp:39

侦察兵
 发表于: 2007-6-8 13:02:00

Re:OGRE放到mfc里面捕捉不到鼠标?

呵呵,MFC中OIS createInputObject 失败这个问题我以前碰到过
跟踪到OIS的代码里,发现是因为OIS调用IDirectInputDevice8::SetCooperativeLevel时失败所置(返回E_HANDLE)。查了一下MSDN,发现SetCooperativeLevel的hWnd参数必须是一个valid 的top level window的句柄! 把传给OIS的"WINDOW"参数改成 StringConverter::toString((unsigned long)AfxGetMainWnd()->GetSafeHwnd())就OK了 (原来我用的是view的wnd的handle)!

所以,根本没有必要把mfc的鼠标键盘消息截获了再发给OGRE窗口

Leeman 2007-6-8 13:08:42

 注册: 2007-5    状态: Offline 2   Top
cnnwm
Exp:113

侦察兵
 发表于: 2007-6-8 14:02:00

Re:OGRE放到mfc里面捕捉不到鼠标?

楼主的问题我也遇到了。。目前还没解决。。
期待有人帮忙解答啊

 注册: 2006-3    状态: Offline 3   Top
Leeman
Exp:39

侦察兵
 发表于: 2007-6-8 14:55:00

Re:OGRE放到mfc里面捕捉不到鼠标?

cnnwm, 按照我说的方法没有解决么?

 注册: 2007-5    状态: Offline 4   Top
Leeman
Exp:39

侦察兵
 发表于: 2007-6-8 15:04:00

Re:OGRE放到mfc里面捕捉不到鼠标?

ExampleFrameListener::ExampleFrameListener()
{
...
LogManager::getSingletonPtr()->logMessage("*** Initializing OIS ***");
ParamList pl;

#if 0
size_t windowHnd = 0;
std::ostringstream windowHndStr;

win->getCustomAttribute("WINDOW", &windowHnd);
windowHndStr << windowHnd;
pl.insert(std::make_pair(std::string("WINDOW"), windowHndStr.str()));
#endif

unsigned long h = (unsigned long)AfxGetMainWnd()->GetSafeHwnd();
pl.insert(std::make_pair(std::string("WINDOW"), StringConverter::toString(h));

pl.insert(std::make_pair(std::string("w32_mouse"), std::string("DISCL_NONEXCLUSIVE")));
pl.insert(std::make_pair(std::string("w32_mouse"), std::string("DISCL_FOREGROUND")));
pl.insert(std::make_pair(std::string("w32_keyboard"), std::string("DISCL_NONEXCLUSIVE")));
pl.insert(std::make_pair(std::string("w32_keyboard"), std::string("DISCL_FOREGROUND")));
mInputManager = InputManager::createInputSystem( pl );

...
}

或者创建RenderWindow时不传视图窗口的handle,改传MainFrame的
NamevaluePairList miscParams;
miscParams["externalWindowHandle"] = StringConverter::toString((unsigned int)AfxGetMainWnd()->GetSafeHwnd());
mWindow = mRoot->createRenderWindow( "View", 640, 480, false, &miscParams );
这样,ois创建输入对象时使用RenderWindow::getCustomAttribute("WINDOW", &windowHnd);获取到也是mainframe的窗口的handle


 注册: 2007-5    状态: Offline 5   Top
免费打工仔
Exp:1049

中士
 发表于: 2007-6-8 23:15:00

Re:OGRE放到mfc里面捕捉不到鼠标?

OIS需要 根窗口的句柄来处理,不要把显示子窗口的句柄传过去:)

 注册: 2003-10    状态: Offline 6   Top
神秘的猫
Exp:286

下士
 发表于: 2007-6-8 23:46:00

Re:OGRE放到mfc里面捕捉不到鼠标?

明白了哈...3Q~~~~

 注册: 2005-4    状态: Offline 7   Top
cnnwm
Exp:113

侦察兵
 发表于: 2007-6-11 16:52:00

Re:OGRE放到mfc里面捕捉不到鼠标?

我没有用MFC。。怎么获得窗口句柄啊
unsigned long h = (unsigned long)AfxGetMainWnd()->GetSafeHwnd();
pl.insert(std::make_pair(std::string("WINDOW"), StringConverter::toString(h));
这里。。
这个能解决OGRE里面的鼠标光标位置和真实的光标位置不一样的问题吗

 注册: 2006-3    状态: Offline 8   Top
共1页,选择:   1  

主题管理:   删除关闭/取消置顶/取消精华/取消移动编辑主题

GameRes游戏开发论坛 » OGRE引擎交流 » OGRE放到mfc里面捕捉不到鼠标?

您尚未登录论坛,可以同通过这里进行登录,如果您不是GameRes用户,可以点击这里立即注册

关于本站 | 投稿指南 | 广告服务 | 联系本站

未经书面许可,请勿转载、链接本站内容,否则非法引用所造成的后果自负;
本站不对所提供的所有资讯正确性负责,若因资讯导致的任何损失本站概不负责,请自行斟酌。
闽ICP备05005107号
Copyright © 2001-2009 GameRes游戏开发资源网 All Rights Reserved.