2

からスクロールバーのようなことをしましたControl。すべて問題ありませんが、カーソルがコントロールエリアを離れると、OnMouseMoveもう受信されません。

標準のウィンドウスクロールバーを使用すると、マウスカーソルがコントロールの表面の外にある場合でも使用できます。

これを回避するために、私が持っている唯一のアイデアは、画面からカーソル位置を取得し、画面上のスクロールバーの位置を計算し、タイマーなどを使用してを更新することControlです。しかし、それは非常に難しく醜いように聞こえます。

それを修正する方法はありますか?

編集:私はそうではControlないことを意味しましたUserControl

EDIT2:マウスを受け取ります!コードにバグがあり、MouseMoveメソッドでMouseDownを呼び出しましたが、MouseDownでは、X<0などの場合に強制的に戻るX/Y制約がありました。

4

1 に答える 1

2

あなたが探しているものは呼ばれmouse capture、ここで説明されています:

http://msdn.microsoft.com/en-us/library/ms171545(v=vs.80).aspx

要するに:

  • コントロールのマウスダウンで、マウス入力を「キャプチャ」します
  • then as long as no-one else captures the mouse, you will receive all mouse movement events, even those outside of your control
  • you can release capture if you don't require the data anymore, optionally in "OnMouseUp"
于 2013-01-07T07:48:20.703 に答える