TrackMouseEvent用法

来源:互联网 发布:中世纪2原版优化9使用 编辑:程序博客网 时间:2024/05/17 04:31

如何响应鼠标离开某个窗体(控件)事件?

OnMuseMove:这个函数时MFC内部已经做好了的事件:主要响应鼠标移动事件.但是这个事件有一个严重的问题:它只能识别鼠标是否在其上移动.

OnMouseMove需要加上的代码段如下:

if ( m_bOver == FALSE )

{

m_bOver = TRUE;

TRACKMOUSEEVENT tme;

tme.cbSize = sizeof( TRACKMOUSEEVENT );

tme.dwFlags = TME_LEAVE;

tme.hwndTrack = m_hWnd;

tme.dwHoverTime = 0;

::TrackMouseEvent( &tme );

}

此时当鼠标移入的时候,m_bOverTRUE.

我们在到OnMouseLeave函数里面把m_bOver设回FLASE.

 

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_GETMOUSEAOVERWIDTHSPI_GETMOUSEHOVERAEIGHT和   SFI_GETMOOSEAOVERTIME值来取得矩形的大小和时间。

 

 

typedef struct tagTRACKMOUSEEVENT {

DWORD cbSize; //TRACKMOUSEEVENT结构的大小

DWORD dwFlags;//定义服务请求

    HWND hwndTrack; //待跟踪窗口的句柄

DWORD dwHoverTime;//定义hover事件耗尽时间

} TRACKMOUSEEVENT, *LPTRACKMOUSEEVENT;

结构详解:

● dwFlags:取值如下:TME_CANCEL取消前一次的跟踪请求;使用该项时必须指定要取消跟踪的类型.(如果想要取消hover跟踪,则应传入TME_CANCEL和TME_HOVER.可以发送WM_MOUSEHOVER消息,如果在hover跟踪处于激活状态时再次请求hover跟踪的话,hover的定时器将被重置.

TME_LEAVE鼠标离开.发送TME_MOUSELEAVE消息.当鼠标不在指定的窗口或者区域上时,将立即产生一个leave通知,不在做任何跟踪

TME_QUERY这一项不是作为跟踪请求的.选中这一项时,当结构体被传送给TrackMouseEvent函数时,即产生当前跟踪.唯一不同的是返回的消耗时间,是真实的消耗时间,而不是HOVER_DEFAULT,即使之前TrackMouseEvent函数锁请求的是HOVER_DEFAULT.

● dwHoverTime:单位为毫秒.可以使用HOVER_DEFAULT来使用系统默认的hover事件耗尽时间.

默认是菜单下拉时间,即400毫秒.可以调用SystemParameterInfo函数并使用SPI_GETMOUSEHOVERTIME来获取系统默认的hover耗尽时间.默认的hover矩形区与双击区一致.也可以使用SPI_GETMOUSEHOVERWIDTH(HEIGHT)来获取鼠标在上面停留可以产生的区域.

 

TrackMouseEvent函数的头文件是winuser.h,对应的库文件为user32.lib

_TrackMouseEvent函数则在commctrl.h里定义,而由COMCTRL32.DLL导出。  

 

 

0 0
原创粉丝点击