关于 WM_MOUSEENTER 和 WM_MOUSELEAVE消息。

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

这两个消息比较古怪,虽然你能找到他们的定义,看起来也似乎挺有用,但是却接收不到。刚才csdn有人问到这个问题,我就随手答了一下,随便贴到这里,以做保存。

----------------------------------------

WM_MOUSELEAVE ,WM_MOUSEENTER 应该算是个自定义的消息,因为Windows通常都不会发送这个消息。只有你调用TrackMouseEvent 才会收到这个消息。

实际上这个消息 是 TrackMouseEvent 而不是windows 发出的。很奇怪微软会定义出这样子的API。而且TrackMouseEvent 个人感觉也不大好用(主要是感觉别扭,不是说功能不行)。其实TrackMouseEvent 的原理也蛮简单的,自己三两句语句就搞定了,不必理会微软搞的这个古里古怪的API,还得去查找消息定义。

原理如下:

鼠标在窗口区域时会收到MouseMove消息,第一次收到这个消息时 就是 WM_MOUSEENTER。

On_MouseMove(...)

{

static BOOL bFirst = TRUE;

if (bFirst)

{

// PostMessage(WM_MOUSEENTER...) or call some function.

bFirst = FALSE;

SetTimer(...);

}

}

在 Mouse Enter 自后启动了一个计时器, 通常100ms 就足够了。计时器里检测鼠标是否离开。

On_Timer(...)

{

...

GetCursorPos(pt);

GetWindowRect(rect);

if (PtInRect(&rect,pt))

{

KillTimer(...); // kill self.

PostMessage(WM_MOUSELEAVE...); // or call some function.

}

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航