查看: 1637|回复: 7

osg中获得组合键

[复制链接]

该用户从未签到

发表于 2011-6-14 11:09:29 | 显示全部楼层 |阅读模式
本帖最后由 wanghuisoftware 于 2011-6-17 10:13 编辑

请问我想在MFC中通过Ctrl+↑来放大场景,可是使用ea.getModKeyMask();ea.getKey()一直无法同时得到,请指教。是我理解错了,在MFC中我参照了样例的代码在onkeydown中传递事件至osg根本传递不了组合键,而应该这样写:
BOOL CTechView:reTranslateMessage(MSG* pMsg)
{
    // TODO: Add your specialized code here and/or call the base class
    /*if   (pMsg-> message   ==   WM_KEYDOWN)
    {
        if   (pMsg-> wParam   ==   VK_ESCAPE)
        {            
            return TRUE;
        }     
    }
    return CView::PreTranslateMessage(pMsg);*/
    osg::ref_ptr<osgGA::GUIEventAdapter> ea = new osgGA::GUIEventAdapter;
    ea->setEventType(osgGA::GUIEventAdapter::KEYDOWN);
    ea->setKey((osgGA::GUIEventAdapter::KeySymbol)(pMsg->wParam));
    if (GetKeyState(VK_CONTROL) & 0x8000)
    {
        ea->setModKeyMask(osgGA::GUIEventAdapter::MODKEY_CTRL);
    }
    mOSG->getViewer()->getEventQueue()->addEvent(ea.get());
}

该用户从未签到

发表于 2011-6-14 12:40:48 | 显示全部楼层
同时得不到就先后得到

该用户从未签到

发表于 2011-6-14 13:27:40 | 显示全部楼层
可以同时得到,我估计楼主的具体做法有问题

该用户从未签到

 楼主| 发表于 2011-6-14 14:21:50 | 显示全部楼层
回复 3# array


    是吗?我就是使用(ea.getModKeyMask()&osgGA::GUIEventAdapter::MODKEY_CTRL)!=0&&ea.getKey()==osgGA::GUIEventAdapter::KEY_Up

该用户从未签到

发表于 2011-6-15 08:19:09 | 显示全部楼层
哦,这样在Windows下可能是不行,因为返回的键值不一样,您不妨直接打印一下getKey()看看Ctrl+上箭头返回的建值是多少。之前我以为您的意思是Ctrl+鼠标键

该用户从未签到

 楼主| 发表于 2011-6-17 09:33:22 | 显示全部楼层
回复 5# array


    版主你好,我试了下,如果Ctrl按的稍微快些的话,就是Ctrl的,如果是上箭头稍微快些的话,就是上箭头的。本身对应的整型数字是能和osg的对应上的。

该用户从未签到

 楼主| 发表于 2011-6-17 09:47:20 | 显示全部楼层
回复 5# array


    同时我在View窗口是通过mOSG->getViewer()->getEventQueue()->keyPress((osgGA::GUIEventAdapter::KeySymbol)nChar);来传的,我看keyPrss函数有一个默认参数,unmodifykey这个是否需要传递?

该用户从未签到

发表于 2011-6-17 15:00:15 | 显示全部楼层
我不认为您有必要自己传递这个值?Windows会自动返回一个代表 CTRL+按键 的值,它不属于任何ASCII码表或者已知枚举量
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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