2013-01-07 69 views
2

我做了類似滾動條從Control。一切都很好,但是當光標離開控制區時,OnMouseMove不再被接收。
接收鼠標移動即使光標在控制之外

當您使用標準窗口滾動條時,即使鼠標光標位於控件表面之外,也可以使用它。

爲了避免這種情況,我唯一的想法是從屏幕上獲取光標位置,然後計算屏幕上的滾動條位置,並使用計時器或其他東西來更新我的Control。但這聽起來很難和難看。

任何想法如何解決它?

編輯:我的意思是Control而不是UserControl

EDIT2: 它接收鼠標!我有錯誤代碼,我的MouseMove方法中調用的MouseDown,但在我的MouseDown有X/Y的約束,這將迫使返回如果X < 0等

+0

連這個都解決了,甚至那些你無法控制的,當光標移出「Form」範圍時,您會遇到同樣的問題。 –

+0

我認爲你的問題是關於焦點。標準滾動條僅在焦點時纔有效。 – 2013-01-07 08:16:38

+0

@KenKin通過鼠標捕捉(請參閱我的回答),即使窗口/表格不在 – Sebastian

回答

2

你要找的是所謂mouse capture,並說明如下:

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

簡而言之:

  • 鼠標在你的控制下你「捕獲」鼠標輸入
  • 那麼只要沒有人否則捕獲鼠標時,您將收到的所有鼠標移動事件,
  • 可以釋放拍攝,如果你不需要的數據了,可選在「OnMouseUp」
+0

嗯,我讀它,我還是不明白:/如何處理這個捕獲財產? – zgnilec

+0

@zgnilec:看起來是我的更新 - 基本上你需要在你的鼠標下面設置屬性「true」處理代碼 – Sebastian

+0

它沒有做任何事情。 – zgnilec