我已经在ESRI支持论坛上发布了此消息,但目前还没有人提供解决方案。
后台:我正在维护一个使用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 :(得分:0)
迟到总比没有...你可以通过调用MapControl对象上的IMapControl4::put_AutoMouseWheel(VARIANT_FALSE)来禁用MapControl上的鼠标滚轮。