irrlicht在mfc mdi窗口中使用的问题
2010-10-29 22:09
239 查看
irrlicht提供的例子基本都是console窗口的,唯一一个windows窗口例子也是通过irrlicht自带的run函数提供消息循环。本来只是想用opengl写一个简单的应用,可实在想用irrlicht的碰撞检测功能,没办法只好查了一下不使用run函数的使用方法,可网上中文资料实在太少,最后在irrlicht官网论坛翻贴加查看irrlicht代码,总算捣鼓出来了,呵呵。
查看CIrrDeviceWin32类run函数实现,可以看到它做了下面的一些事情:
1.计时器++,这里面的值在CSceneNodeAnimatorCameraFPS的移动操作里会用到。
2.分发消息,如果窗口句柄是irrlicht挂接的窗口,那么由irrlicht接管操作。
3.resizeIfNecessary,改变窗口大小
4.下面这个没细看,看样子是和游戏句柄相关的操作
这样来看,只要实现1,3,4,并在接收到消息的时候,把需要irrlicht接管的消息分发给他就可以了(对应2的操作)。
那么下面就简单了,假如irrlicht挂接的是某个view的句柄,那么只需要重载该view的windowproc函数,像下面这样:
LRESULT CDemoView::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
if ( device )
device->getTimer()->tick();
//假如需要irrlicht接管某些按键(比如上下左右键)的WM_KEYDOWN消息,就在该消息的case中组合irr::SEvent,
//并通过smgr->postEventFromUser(evnt)改变irrlicht状态,最后别忘了重绘
}
另外可以派生一个IEventReceiver子类,用来处理各类鼠标按键消息,方便一些。
如果使用CSceneNodeAnimatorCameraFPS的话,鼠标会始终锁定在窗口中央,如果想点点菜单按钮工具栏什么的是没办法的,查看CSceneNodeAnimatorCameraFPS::animateNode可以知道它的实现。
如果想在系统窗口和irrlicht窗口之间切换,可以通过设置
camera->setInputReceiverEnabled函数以决定云不允许irrlicht窗口相应鼠标按键消息,默认CSceneNodeAnimatorCameraFPS会相应left,right,up,down,j键以及鼠标消息。
还有一种比较彻底的解决方法就是派生一个CSceneNodeAnimatorCameraFPS的子类,重写相应的方法,这样也可以通过SKeyMap扩充摄像机可以响应的按键消息。
乱七八糟写了这么些,也不知道有没人能看明白,语文不大好,呵呵。
PS:如果有朋友需要WindowProc的实现,可以给我发邮件cmoth@126.com
查看CIrrDeviceWin32类run函数实现,可以看到它做了下面的一些事情:
1.计时器++,这里面的值在CSceneNodeAnimatorCameraFPS的移动操作里会用到。
2.分发消息,如果窗口句柄是irrlicht挂接的窗口,那么由irrlicht接管操作。
3.resizeIfNecessary,改变窗口大小
4.下面这个没细看,看样子是和游戏句柄相关的操作
这样来看,只要实现1,3,4,并在接收到消息的时候,把需要irrlicht接管的消息分发给他就可以了(对应2的操作)。
那么下面就简单了,假如irrlicht挂接的是某个view的句柄,那么只需要重载该view的windowproc函数,像下面这样:
LRESULT CDemoView::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
if ( device )
device->getTimer()->tick();
//假如需要irrlicht接管某些按键(比如上下左右键)的WM_KEYDOWN消息,就在该消息的case中组合irr::SEvent,
//并通过smgr->postEventFromUser(evnt)改变irrlicht状态,最后别忘了重绘
}
另外可以派生一个IEventReceiver子类,用来处理各类鼠标按键消息,方便一些。
如果使用CSceneNodeAnimatorCameraFPS的话,鼠标会始终锁定在窗口中央,如果想点点菜单按钮工具栏什么的是没办法的,查看CSceneNodeAnimatorCameraFPS::animateNode可以知道它的实现。
如果想在系统窗口和irrlicht窗口之间切换,可以通过设置
camera->setInputReceiverEnabled函数以决定云不允许irrlicht窗口相应鼠标按键消息,默认CSceneNodeAnimatorCameraFPS会相应left,right,up,down,j键以及鼠标消息。
还有一种比较彻底的解决方法就是派生一个CSceneNodeAnimatorCameraFPS的子类,重写相应的方法,这样也可以通过SKeyMap扩充摄像机可以响应的按键消息。
乱七八糟写了这么些,也不知道有没人能看明白,语文不大好,呵呵。
PS:如果有朋友需要WindowProc的实现,可以给我发邮件cmoth@126.com
相关文章推荐
- docablepane 可停靠窗口在使用过程中的问题小结 vc mfc
- MFC--滚动视图窗口(CScrollView)使用双缓冲问题
- MFC中使用线程创建窗口的问题
- 【旧资料整理】MFC--滚动视图窗口(CScrollView)使用双缓冲问题
- docablepane 可停靠窗口在使用过程中的问题小结 vc mfc
- 在zsh下使用tmux会自动变更窗口名称的问题
- MFC在共享DLL中使用转换为静态库中使用的一些问题
- 在使用MFC时出现mfc42d.dll丢失的问题
- 打开新窗口的window.open使用方法以及最大化等问题解决方法汇总
- MFC窗口初始最大的问题
- ACE 与MFC 混合使用 内存泄露问题
- Windows MFC 两个OpenGL窗口显示与线程RC问题
- MFC中InvalidateRect 、GetCursorPos、静态或全局变量使用、 error RC1121 四个问题
- 记WIN32使用duilib时添加MFC类库发现内存泄露的问题解决
- MFC程序多窗口引起的激活和非激活问题
- 模块切换——MFC的规则DLL中资源使用的问题
- 使用CSplitterWnd和重绘窗口大小时发生的问题
- 在MFC “共享MFC 规则DLL”中(创建MFC DLL中选第一个),使用MFC对话框注意问题
- 使用easyui时,每多点击一次多生成一个datagrid窗口的问题
- MFC MDI 窗口函数执行顺序