查看: 1370|回复: 1

求助:在拖拽器上获取鼠标滚轮消息

[复制链接]

该用户从未签到

发表于 2012-9-4 14:12:42 | 显示全部楼层 |阅读模式
想在拖拽器上获取到鼠标滚轮的消息,但是通过ea.getEventType()无法获取到SCROLL类型。看了几篇帖子,发现可以从漫游器中抓到该消息,但是不知道是哪里的设置需要打开才能收到。
请哪位大侠出手相助一下,谢谢~~

具体代码如下:
1、这里是OrbitManipulator漫游器能抓到滚轮事件,处理后返回true。

  1. /// Handles GUIEventAdapter::SCROLL event.
  2. bool OrbitManipulator::handleMouseWheel( const GUIEventAdapter& ea, GUIActionAdapter& us )
复制代码

2、这里是GUIEventHandler中的处理代码,是否和_ignoreHandledEventsMask这个变量有关?

  1.         
  2. inline bool handleWithCheckAgainstIgnoreHandledEventsMask(const GUIEventAdapter& ea,GUIActionAdapter& aa)
  3.         {
  4.             if (!ea.getHandled() ||
  5.                 (ea.getEventType() & _ignoreHandledEventsMask)==0)
  6.             {
  7.                 bool handled = handle(ea,aa);
  8.                 if (handled) ea.setHandled(true);
  9.                 return handled;
  10.             }
  11.             else
  12.             {
  13.                 return false;
  14.             }
  15.         }
复制代码

3、滚轮的消息处理从这里开始(viewer.cpp:946~955),

  1.     for(osgGA::EventQueue::Events::iterator itr = events.begin();
  2.         itr != events.end();
  3.         ++itr)
  4.     {
  5.         osgGA::GUIEventAdapter* event = itr->get();
  6.         if (_cameraManipulator.valid())
  7.         {
  8.             _cameraManipulator->handleWithCheckAgainstIgnoreHandledEventsMask( *event, *this);
  9.         }
  10.     }
复制代码

4、我的漫游器handle处理代码,无法获取到滚轮消息。

  1. bool MyDragger::handle( const PointerInfo& pi, const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdapter& aa )
  2. {
  3.         if ( ea.getEventType() == osgGA::GUIEventAdapter::SCROLL )
  4.         {
  5.                 float        fScrollDelta = ea.getScrollingDeltaY();

  6.                 if ( ea.getScrollingMotion() == osgGA::GUIEventAdapter::ScrollingMotion::SCROLL_UP )
  7.                 {
  8.                         osg::notify(osg::NOTICE) << "SCROLL MOTION: " << ea.getScrollingMotion() << ", Delta(" << fScrollDelta << ")" << endl;
  9.                 }
  10.         }
  11.         else
  12.         {
  13.                 osg::notify(osg::NOTICE) << "EventType : " << ea.getEventType() << endl;
  14.         }

  15.         return false;
  16. }
复制代码

该用户从未签到

 楼主| 发表于 2012-9-5 11:55:01 | 显示全部楼层
结贴,原因找到了,是没有在漫游器里加这条事件的处理~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表