gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 14:27:15 25 4
gpt4 key购买 nike

我已将其发布在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com