3

WebBrowserサードパーティの Web アプリケーションへのアクセスを "ダミープルーフ" (つまり、コンテキスト メニュー、戻るボタン、フリー ナビゲーションなどを無効にする)する埋め込みコントロールを使用して、C# で Windows フォーム アプリケーションを開発しています。

現在、ズーム機能をカスタム ブラウザに追加しようとしています。キーボードの組み合わせが機能しています (CTRL + および CTRL - 基礎となる ActiveX WebBrowser オブジェクトへの正しい OLE 呼び出しを行います) が、WebBrowser対処しなければならなかったその他の苛立たしいことの中で、理解できないようですIE のようにズーム機能をシミュレートするために CTRL-マウス ホイールをキャプチャする方法。私はこれに対する解決策を見つけるためにいたるところを見ましたが、役に立ちませんでした。

それを理解するために、WebBrowser コントロールだけを含む空のフォームを作成したところ、次のことがわかりました。

  1. CTRL-MouseWheel は、親フォームにフォーカスがあり、マウス カーソルがウィンドウの上部 (アプリケーションのタイトルなど) にあるとき、またはコントロールが表示されていないときMouseWheelにマウス カーソルがコントロールの上にあるときに、常にイベントを発生させます。WebBrowser親フォームにフォーカスがあっても、フォーカスを取得できません。
  2. CTRL-MouseWheel はMouseWheel、マウス カーソルがWebBrowserコントロール上WebBrowserにあり、フォーカスがあるときにイベントを発生させず、効果がないように見えます。
  3. CTRL を使用せずにマウス ホイールを使用すると、ウィンドウの内容がスクロールされますが、垂直スクロール バーが上部または下部に完全に達するまでイベント WebBrowserは発生しません。MouseWheel
  4. から継承されたサンプル クラスと親フォームの両方のオーバーライドによる for のインターセプトは、上記の条件にのみ適用されます (適切にMessageを示します)。WM_MOUSEWHEELWndProcDefWndProcWebBrowserwParamMK_CONTROL
  5. PreviewKeyDown予想どおり、CTRL が押されるとイベントが発生しますが、マウス ホイールとは連携して何もしません。

したがってMessage、親フォームとマネージド コントロール レベルの下で処理されており、傍受したり処理したりできる場所までバブルアップしないと思います。これを行う方法、または CTRL-MouseWheel を使用してズームインおよびズームアウトをシミュレートする他の方法はありますか?

読んでくれてありがとう!

4

5 に答える 5

0

この問題を解決するには、次のメッセージをリッスンして処理する必要があります。

  • OLECMDID_GETZOOMRANGE
  • OLECMDID_OPTICAL_GETZOOMRANGE
  • OLECMDID_OPTICAL_ZOOM
  • OLECMDID_ZOOM

それらはInternetExplorerによってディスパッチされます。MSDNの備考を参照してください。

于 2012-02-12T02:37:29.423 に答える
0

おそらく、SetWindowsHookEx を使用してこれらのイベントを探すとうまくいくかもしれません。これは、ActiveX MapPoint コントロールの上でスクロール ホイール イベントを取得するために使用したものです。

Windows 7 では、多少の調整が必要な場合があるため、これにはいくつかの癖があることに注意してください。詳細については、MSDN フォーラムで SetWindowsHookEx on Windows 7 を検索してください。

于 2011-01-04T18:07:37.083 に答える