查看: 1761|回复: 3

MFC消息传递问题

[复制链接]

该用户从未签到

发表于 2010-1-18 16:50:12 | 显示全部楼层 |阅读模式
本帖最后由 lyc0 于 2010-1-18 16:51 编辑

参照osgMFC的例子。。。另开一线程渲染OSG

如今想实现一个功能,就是,在MFC用户菜单触发OSG的Handle事件...
例如,点击“cancle””,然后触发OSG的鼠标右健事件。
现在实现方法为:
触发“cancle”事件后,
viewer->getEventQueue()->mouseButtonPress(0,0,RIGHT_MOUSE_BUTTON)

在handle中可以拿到ea.getEventType() == PUSH
但是,ea.getButtonMask()的值却不是RIGHT_MOUSE_BUTTON的值。。。

问题:
1。 如何解决以上问题
2。  除此办法外还有其他好办法不?

该用户从未签到

发表于 2010-1-19 08:38:06 | 显示全部楼层
获取当前鼠标事件的方法是getButton()!而您所使用的getButtonMask(),它实质上是用于DRAG这些没有传递按键值的事件的,它指出了最后一次按下鼠标键时的键值信息

您所使用的方法的确不是最好的,因为用户菜单使用mouseButtonPress传递事件时,无法预知当前OSG线程运行到哪个阶段,因此存在事件被冲掉甚至导致系统不稳定的问题。其他方法还有很多,比如改成在回调中处理handle事件等,您大可自己根据设计的需要去处理~~

该用户从未签到

 楼主| 发表于 2010-1-19 09:50:05 | 显示全部楼层
在正常的事件处理中,handle中的PUSH,我就是用ea.getButtonMask()来区分左右键的,只不过用
mouseButtonPress(0,0,RIGHT_MOUSE_BUTTON)
触发的事件,就区分不了了....
(调用mouseButtonPress可以触发PUSH)

可能真的是被冲掉了吧...

该用户从未签到

发表于 2010-1-19 12:46:22 | 显示全部楼层
请使用getButton(),我在上一贴中已经说过了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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