查看: 1667|回复: 4

操作器“ctrl+z”组合键问题

[复制链接]

该用户从未签到

发表于 2014-2-18 11:40:27 | 显示全部楼层 |阅读模式
在另一篇帖子中看到一个解决办法,然后就根据那个修改了下,那并没有实现我要的效果,求解释!
  1.                 switch (ea.getEventType())
  2.                 {
  3.                 case(osgGA::GUIEventAdapter::KEYDOWN):
  4.                         {
  5.                                 if (ea.getKey() =='z'|| ea.getKey () == 'Z')//up
  6.                                 {
  7.                                         undo=true;
  8.                                         return true;
  9.                                 }
  10.                                 if (ea.getKey() == osgGA::GUIEventAdapter::KEY_Control_L )//down
  11.                                 {
  12.                                         ctrl=true;
  13.                                         return true;
  14.                                 }
  15.                                 return false;
  16.                 case osgGA::GUIEventAdapter::KEYUP:
  17.                         if (ea.getKey() == 'z'|| ea.getKey () == 'Z')//up
  18.                         {
  19.                                 undo=false;
  20.                                 return true;
  21.                         }
  22.                         if (ea.getKey() == osgGA::GUIEventAdapter::KEY_Control_L )//down
  23.                         {

  24.                                 ctrl=false;
  25.                                 return true;
  26.                         }      
  27.                         }
  28.                         break;
  29.                 default:
  30.                         break;
  31.                 }
  32. if (ctrl)
  33.                 {
  34.                         std::cout<<"ctrl"<<std::endl;
  35.                 }
  36.                 if (undo)
  37.                 {
  38.                         std::cout<<"z"<<std::endl;
  39.                 }
复制代码

调试时发现,当按住“ctrl”时,再按下“z”键“z”键是没有响应的,也就是说没有执行到下面这段代码
if (ea.getKey() =='z'|| ea.getKey () == 'Z')//up
                                {
                                        undo=true;
                                        return true;
                                }
如果按另一篇帖子(关于漫游器
http://www.osgchina.org/forum.ph ... 85&fromuid=6399
(出处: OpenSceneGraph中国讨论区-有您OSG在中国才更好)
)上说的这个是正解,那按下“ctrl”后再按下“z”应该会有响应啊?这是怎么回事呢??谢谢!

该用户从未签到

发表于 2014-2-18 15:38:09 | 显示全部楼层
Windows系统下Ctrl + Z传入的key值是另一个值,可能是26。这是windows系统的一个特(sha)性(bi),其它平台下您的判断是可以的

该用户从未签到

 楼主| 发表于 2014-2-18 20:50:28 | 显示全部楼层
array 发表于 2014-2-18 15:38
Windows系统下Ctrl + Z传入的key值是另一个值,可能是26。这是windows系统的一个特(sha)性(bi),其它平 ...

谢谢array.根据您的提示回去找了下资料,然后发现是自己思路错了,“ctrl+z”应该是一个快捷键,而不是单纯的两个键相加,和漫游器中的往右前方移动不同,不过我还有点不太明白的就是,教程上说: OSG 中支持的键盘码值 有一个是:KEY_Undo  0xFF65 ,但我不知道key_undo是不是指的“ctrl+z”还是其他什么?因为我用if getkey()==0xFF65 进行判断还是不正确,说明这个key_undo不是mfc中传进来的“ctrl+z”还是怎么回事呢??谢谢!

该用户从未签到

发表于 2014-2-19 09:17:26 | 显示全部楼层
ctrl+键盘键,windows读取的键值结果是原始键值加96

该用户从未签到

 楼主| 发表于 2014-2-19 15:14:07 | 显示全部楼层
dearpa 发表于 2014-2-19 09:17
ctrl+键盘键,windows读取的键值结果是原始键值加96

谢谢,原来是这样,我回去再试试!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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