c++ - ESRI map 对象 - 是否可以禁用 MouseWheel 事件处理程序?

标签 c++ arcgis esri

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

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

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

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

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

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

最佳答案

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

关于c++ - ESRI map 对象 - 是否可以禁用 MouseWheel 事件处理程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2864278/

相关文章:

javascript - ArcGIS JavaScript API (3.8) centerAndZoom 似乎无法正常工作

c++ - Robert Sedgewick 的 C++ 算法经验

C++ 异步主机名解析

c++ - 如何协调跨进程的端口使用?

查询 ArcGIS Web 服务时出现 Python MemoryError

javascript - 如何在 ArcGIS API for Javascript 3.x 中选择和删除图形(通过环数组)

mysql - ArcGIS 中不需要的 varchar 到 BLOB 转换

c++ - 如何从 rand() 缩小数字?

html - 将文本用于链接,将 XSL 用于 HTML 弹出窗口