1

これを 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 オブジェクトに指示する方法を教えてください。

4

1 に答える 1

0

遅ればせながら、MapControl オブジェクトでIMapControl4::put_AutoMouseWheel(VARIANT_FALSE)を呼び出すことで、MapControl のマウス ホイールを無効にすることができます。

于 2013-10-17T13:29:57.110 に答える