2010-05-19 24 views
1

我已经在ESRI支持论坛上发布了这个,但是还没有人回来解决方案。ESRI Map对象 - 是否可以禁用MouseWheel事件处理程序?

背景:我在维护一个使用ESRI ArcGIS组件(版本9.3.1 SP1)的C++地图显示应用程序。它实例化一个Map对象(esriCarto :: Map),查询IActiveView接口,并调用Activate在视图窗口客户区传递(还有一大堆其他属性也通过各种接口设置)。然后将其用于绘制操作序列的中间以呈现最终的显示图像。

问题: WM_MOUSEWHEEL事件似乎在Map对象(或一个子对象?)中被拾取,并导致奇怪的行为。应用程序中应该发生的事情是,视图窗口接收到此消息,然后调用“缩放”方法触发适当的重绘。实际发生的情况是消息通过视图窗口的PreTranslateMessage,然后显示区域出现故障,,然后视图窗口的OnMouseWheel处理程序被调用来处理缩放。

'毛刺',我的意思是视图窗口变成白色,然后重新显示前一个图像。这并没有发生在与ArcGIS 9.2集成的应用程序的早期版本中,并且在发生这种干扰效果时,没有任何应用程序自己的绘图代码被调用。如果通过另一个上下文菜单选项调用窗口的缩放功能,也不会发生这种情况。

在阅读了参考信息一段时间后,我怀疑Map的子ScreenDisplay对象响应鼠标滚轮事件并做了一些我们不希望它对视图区域做的事情 - 我还怀疑有一个告诉它不要,但我似乎无法找到它。我有一个解决方法,即处理视图窗口的PreTranslateMessage中的缩放,并防止消息进一步发展,但这感觉像是一种黑客攻击。

因此,任何一种聪明的人都可以告诉Map对象忽略鼠标滚轮事件吗?

+0

与您的软件供应商合作寻找解决方案。他们接近源代码,毫无疑问可以为您提供正确的解决方法或修补程序。 – 2010-05-19 12:47:09

+0

感谢汉斯,但我已经尝试过(如上所述),目前还没有成功。我仍在跟进ESRI,看看他们能否提供答案,但同时我在这里发布也没有什么坏处。 – 2010-05-19 13:41:41

回答

相关问题