【问题标题】:ESRI Map object - Is it possible to disable the MouseWheel event handler?ESRI 地图对象 - 是否可以禁用 MouseWheel 事件处理程序?
【发布时间】:2011-02-21 07:10:26
【问题描述】:

我已在 ESRI 支持论坛上发布了此内容,但目前还没有人提供解决方案。

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

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

“故障”是指视图窗口短暂变白,然后重新显示之前的图像。这在与 ArcGIS 9.2 集成的应用程序的早期版本中没有发生,并且在发生这种故障效果时,没有调用应用程序自己的绘图代码。如果通过替代上下文菜单选项调用窗口的缩放功能,也不会发生这种情况。

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

那么,任何善良和聪明的人都可以指点我告诉 Map 对象忽略鼠标滚轮事件的方法吗?

【问题讨论】:

  • 与您的软件供应商一起寻找解决方案。它们接近源代码,无疑可以为您提供适当的解决方法或修补程序。
  • 谢谢汉斯,但我已经尝试过(如前所述),但还没有成功。我仍在跟进 ESRI,看看他们是否可以提供答案,但与此同时,我认为在这里发帖也没有什么坏处。

标签: c++ arcgis esri


【解决方案1】:

迟到总比没有好...您可以通过在 MapControl 对象上调用 IMapControl4::put_AutoMouseWheel(VARIANT_FALSE) 来禁用 MapControl 上的鼠标滚轮。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-07
    • 2021-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-06
    • 2012-12-03
    相关资源
    最近更新 更多