當在指定時間內滑鼠指針離開或盤旋在一個視窗上時,此函式寄送訊息。
基本介紹
- 外文名:TrackMouseEvent
- 套用學科:計算機,數學
- 適用領域範圍:計算機,編程
- 適用領域範圍:API
- lpEventTrack:指向結構TRACKMOUSEEVENT的指針
其他信息,
其他信息
函式原型:BOOL TrackMouseEvent(LPTRACKMOUSEEVENT lpEventTrack);
參數:lpEventTrack;指向結構TRACKMOUSEEVENT的指針。
此函式能寄送如下訊息:
WM_MOUSEHOVER:在上次調用TrackMouseEvent指定的時間里,滑鼠盤旋在視窗的客戶區。當此訊息產生時,盤旋跟蹤停止。如果需要進一步的滑鼠盤旋跟蹤,應用程式應當再次調用TrackMouseEvent。
WM_MOUSELEAVE:滑鼠離開上次調用TrackMouseEvent時指定的視窗客戶區。當此訊息產生時,所有由TrackMouseEvent要求的跟蹤都被取消。當滑鼠再次進入視窗,並且要求進一步的滑鼠盤旋跟蹤時,應用程式必須調用TrackMouseEvent。
該處使用自定義訊息傳送形式:
ON_MESSAGE(WM_MOUSELEAVE,OnMouseLeave)
ON_MESSAGE(WM_MOUSEHOVER,OnMouseHover)
才能使用
注意:WM_MOUSELEAVE回響函式為 void OnMouseLeave(WPARAM wp,LPARAM lp),若寫成 void OnMouseLeave(),Release下運行會出現錯誤。
備註:當滑鼠指針在指定時間內停留在指定矩形內,就被認為是處於盤旋狀態。調用函式
SystemParameterslnfo並使用SPI_GETMOUSEAOVERWIDTH,SPI_GETMOUSEHOVERAEIGHT和
SFI_GETMOOSEAOVERTIME值來取得矩形的大小和時間。
速查:Windows NT 4.0及以上版本;Windows 98及以上版本;Windows CE:1.0及以上版本;頭檔案:winuser.h;輸入庫:user32.lib。
::TrackMouseEvent 要使用它,請在源碼中包含#define _WIN32_WINNT 0x0400
TRACKMOUSEEVENT 結構體
TRACKMOUSEEVENT結構體在TrackMouseEvent函式中用到。
其定義如下:
typedef struct tagTRACKMOUSEEVENT {
DWORD cbSize;
DWORD dwFlags;
HWND hwndTrack;
DWORD dwHoverTime;
} TRACKMOUSEEVENT, *LPTRACKMOUSEEVENT;
幾個成員的含義:
cbSize 定義TRACKMOUSEEVENT結構體的大小;
dwFlags 定義服務請求,可以是下列值的組合:TME_CANCEL 取消前一次的跟蹤請求;使用該項時必須指定要取消跟蹤的類型,例如要取消hover跟蹤,就必須同時傳送TME_CANCEL和 TME_HOVER(TME_CANCEL|TME_HOVER)。TME_HOVER hover通知。可以傳送WM_MOUSEHOVER訊息。如果在hover跟蹤處於激活狀態時再次請求hover跟蹤的話,hover的定時器將被重 置。TME_LEAVE 滑鼠離開。傳送TME_MOUSELEAVE訊息。當滑鼠不在指定的視窗或區域上時,將立即產生一個leave通知,不再做任何跟蹤。TME_QUERY 這一項不是作為跟蹤請求的。選中這一項時,當結構體被傳送給TrackMouseEvent函式時,即產生當前跟蹤。唯一不同的是返回的消耗時間,是真實 的消耗時間而不是HOVER_DEFAULT,即使之前TrackMouseEvent函式所請求的是HOVER_DEFAULT。
hwndTrack 待跟蹤視窗的句柄
dwHoverTime 定義hover事件的耗盡時間(如果在dwFlags中有定義TME_HOVER的話),單位毫秒。 可以使用HOVER_DEFAULT來使用系統默認的hover事件耗盡時間。系統默認的hover事件耗盡時間為選單下拉時間,即400毫秒。可以調用SystemParameterInfo函式並使用 SPI_GETMOUSEHOVERTIME來獲取默認的hover耗盡時間。默認的hover矩形區與雙擊區一致。可以調用 SystemParameterInfo並使用SPI_GETMOUSEHOVERWIDTH和SPI_GETMOUSEHOVERHEIGHT來獲取鼠 標在上面停留可以產生WM_MOUSEHOVER的區域。另外還有一個小問題。前面一直都說的是TrackMouseEvent函式,但實在上,在程式中,如果直接使用 TrackMouseEvent(&tme);時,會出現諸如“'TrackMouseEvent' : undeclared identifier”的錯誤。但如果你使用_TrackMouseEvent(&tme);就不會有錯誤了。為什麼呢?
這兩個函式的區別,TrackMouseEvent函式的頭檔案是winuser.h,對應的庫檔案為user32.lib,而 _TrackMouseEvent函式則在commctrl.h里定義,而由COMCTRL32.DLL導出。
使用 TrackMouseEvent函式必須用extern "C"導入此函式。如下:
extern "C" WINUSERAPI BOOL WINAPI TrackMouseEvent (LPTRACKMOUSEEVENT
lpEventTrack);
NOTE:由上面說到的TrackMouseEvent函式的特點,通常都在OnMouseMove函數裡添加該函式。另外,可以與 SetCapture函式聯合使用,即使在滑鼠移出視窗區時也能夠回響。