日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

WPF,强制捕获鼠标事件,鼠标移出控件外依然可以执行强制捕获的鼠标事件

發布時間:2023/12/20 asp.net 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 WPF,强制捕获鼠标事件,鼠标移出控件外依然可以执行强制捕获的鼠标事件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在WPF中,只有鼠標位置在某個控件上的時候才會觸發該控件的鼠標事件。
例如,有兩個控件都注冊了MouseDown和MouseUp事件,在控件1上按下鼠標,不要放開,移動到控件2上再放開。
在這個過程中,控件1只會觸發MouseDown事件,而控件2則只會觸發MouseUp事件,鼠標不在控件上他們就收不到對應的鼠標事件。
同樣的如果某個控件注冊了MouseMove事件,當鼠標移動到控件外之后,控件將不會接收到MouseMove事件。
但是在很多情況下我們需要在鼠標移動到控件外之后還能接收鼠標事件。例如按住鼠標拖動,當鼠標到了控件外,拖動操作依然可以繼續。
這些情況需要控件強制捕獲鼠標,這就要用到UIElment 的CaptureMouse 函數和ReleaseMouseCapture 函數。
CaptureMouse 函數的作用是嘗試將鼠標強制捕獲到控件,ReleaseMouseCapture 函數的作用是當控件具有鼠標捕獲的話,則釋放該捕獲。

下面舉個例子,例如我們需要在一張圖片上通過鼠標拖動畫一個矩形框,操作步驟分為:
1. 點擊鼠標左鍵,確定矩形的一個頂點P;
2. 按住鼠標左鍵并拖動鼠標,將鼠標位置作為矩形中頂點P所屬的對角線的另外一個頂點,畫矩形;
3. 放開鼠標左鍵,完成矩形繪制。
但是當鼠標移動到圖片邊緣的時候,圖片接收不到鼠標MouseMove和MouseUP事件,繪制過程就無法正常完成了。

為了解決這個問題,我們需要在MouseLeftButtonDown 事件的相應函數中加上如下代碼
((UIElement)e.Source).CaptureMouse();
在MouseUp 事件的相應函數中加入
((UIElement)e.Source).ReleaseMouseCapture();
這樣,即使鼠標在圖片外,我們也能繼續執行捕獲的鼠標事件。

為了讓矩形不畫到圖片外,我們可以對矩形的邊框位置加上限制,矩形的兩個頂點必須限制:
??? Point p = e.GetPosition(this.imageControl);
??? p.X = Math.Max(0, p.X);
??? p.Y = Math.Max(0, p.Y);
??? p.X = Math.Min(this.imageControl.Width, p.X);
??? p.Y = Math.Min(this.imageControl.Height, p.Y);
在使用了CaptureMouse 函數將鼠標強制捕獲到控件后,一定不要忘記在完成操作后使用ReleaseMouseCapture 函數釋放捕獲,

否則在其他控件上進行鼠標操作依然會觸發捕獲鼠標的控件的鼠標事件,而非原本鼠標點擊的控件的鼠標事件響應函數。

轉載于:https://www.cnblogs.com/qiantao/p/9429831.html

總結

以上是生活随笔為你收集整理的WPF,强制捕获鼠标事件,鼠标移出控件外依然可以执行强制捕获的鼠标事件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。