NButton滑鼠移出偵測方法

2021-05-23 14:43:04 字數 1113 閱讀 2402

a: 

該如何偵測nbutton滑鼠移出 ?

使用trackmouseevent可以得到滑鼠移開視窗客戶區的訊息,但是對整個視窗無效。基本上有兩種通用的方法: 

1、使用setcapture

2、使用settimer 

這兩種方法幾乎是最常用和最簡單的啦。

b:譬如,我欲從cbutton派生出乙個控制項,能對滑鼠進行熱響應。當滑鼠移入、移出此視窗時,按鈕介面產生相應變化,如果採用settimer,同時在此介面上有排列緊密的數十個按鈕控制項,則此時由於占用了大量系統資源,很難準確響應(硬體每秒僅產生18.2次中斷)。而在工具條的tooltip顯示中,根本未spy到wm_timer訊息,顯然,微軟未採用settimer的做法。另外,在setcapture情況下,攔截不到wm_mouselbuttondown等其他滑鼠訊息,也不是一種很好的做法。有沒有這樣一種辦法,在windows系統級,當他檢測到滑鼠下的視窗發生變化時,向前一視窗傳送wm_mouselost,向當前視窗傳送wm_mouseget訊息。a:

你真傻。

1、如果使用settimer的辦法,並不需要占用太多的系統資源。為什麼呢?在某乙個時刻,只可能有乙個按鈕處於需要監視滑鼠移開視窗的訊息(因為滑鼠進入可以由wm_mousemove知道)。顯然沒有必要為每個按鈕都settimer。你再好好想想。我可不是在瞎說!

2、如果你那些按鈕是「排列緊密」的,那麼最好不要使用單個的視窗,而是使用乙個視窗——工具欄,這樣有最小的系統資源占用。

3、同樣的道理,tooltip不要為每乙個按鈕都設定,而是應該在主視窗中設定乙個,針對不同的控制項設定不同的提示即可。另外,tooltip確實不需採用settimer,它使用relayevent來監聽視窗訊息。

總之,你不需要再想其他辦法了,因為settimer已經被證實是行之有效的方法。使用方法應該是這樣:

在wm_mousemove中,判斷是否處於按鈕hover狀態。如果是,退出。否則,置按鈕狀態為hover,重繪按鈕並settimer。間隔為100即可。然後,在wm_timer中,使用getcursorpos得到滑鼠位置。如果位於視窗內,退出。否則,killtimer,置按鈕狀態為normal並重繪按鈕。可以看到,在整個處理過程中,在某乙個特定時刻只可能有乙個timer是處於啟用狀態的。這樣系統資源占用是很小的。

滑鼠移入移出事件

js給網頁新增互動 功能 修改樣式。核取方塊 滑鼠提示框 將滑鼠移入核取方塊,div顯示 display block 滑鼠移出核取方塊,div隱藏 display none 事件 使用者的操作,onmouseover 滑鼠移入事件,onmouseout 滑鼠移出事件 testing mouseeve...

PowerBuilder滑鼠移入移出事件

powerbuilder中只有視窗和富文字有mouse事件外,其他都沒有 powerbuiler中沒有滑鼠移入移出的直接事件,需要我們自己定義 1.首先需要定義乙個結構,用來儲存滑鼠的座標 position 2.宣告兩個全域性外部函式 3.新增timer 在在視窗的open事件或者某個觸發事件中新增...

jquery滑鼠移入變色移出恢復

一 需求說明 現需要對乙個 的內容部分做下高亮處理 當滑鼠放到這一行時,背景色發生改變 當滑鼠移出這一行時,恢復這一行的原有背景色。如下圖,原來是除了首行以外,帶序號的內容部分,奇偶行背景色交替變化,當滑鼠放到第1行時,看到下圖的樣式,移出該行後,恢復原樣。二 實現 table及樣式部分 序號 姓名...